Python知识汇总
2022-04-02 11:51:01 7 举报
AI智能生成
关于Python的知识汇总,持续更新
作者其他创作
大纲/内容
python入门
计算机基础知识
计算机基础
操作系统
python环境搭建
官网:http://www.python.org/download/
注:记得安装时勾上Add Python3.X to PATH
命令提示窗:输入python查看是否安装成功
如果报错,则需要配置环境变量
右键我的电脑–>选择属性–>选择高级系统设置–>选择右下角的环境变量
复制python的路径->双击环境变量里PATH->点击新建->将python路径粘贴到新建里->保存
安装pycharm
官网:https://www.jetbrains.com/pycharm/download/#section=windows
选择community版本
编辑默认代码开头
File>>Settings>>Editor>>File and Code Templates>>Python Script
# -*- coding: utf-8 -*-
# @Time : ${DATE} ${TIME}
# @Author : ChengH
# @Site : ${SITE}
# @File : ${NAME}.py
# @Software: ${PRODUCT_NAME}
# ━━━━━━神兽出没━━━━━━
# ┏┓ ┏┓
# ┏┛┻━━━━━┛┻━━┓
# ┃ ┃
# ┃ ━ ┃
# ┃ ┳┛ ┗┳ ┃
# ┃ ┃
# ┃ ┻ ┃
# ┃ ┃
# ┗━━┓ ┏━━┛Code is far away from bug with the animal protecting
# ┃ ┃ 神兽出没,bug退避
# ┃ ┃
# ┃ ┗━━━━━┓
# ┃ ┣┓
# ┃ ┏┛
# ┗┓┓┏━━━┳┓┏━━┛
# ┃┫┫ ┃┫┫
# ┗┻┛ ┗┻┛
# @Time : ${DATE} ${TIME}
# @Author : ChengH
# @Site : ${SITE}
# @File : ${NAME}.py
# @Software: ${PRODUCT_NAME}
# ━━━━━━神兽出没━━━━━━
# ┏┓ ┏┓
# ┏┛┻━━━━━┛┻━━┓
# ┃ ┃
# ┃ ━ ┃
# ┃ ┳┛ ┗┳ ┃
# ┃ ┃
# ┃ ┻ ┃
# ┃ ┃
# ┗━━┓ ┏━━┛Code is far away from bug with the animal protecting
# ┃ ┃ 神兽出没,bug退避
# ┃ ┃
# ┃ ┗━━━━━┓
# ┃ ┣┓
# ┃ ┏┛
# ┗┓┓┏━━━┳┓┏━━┛
# ┃┫┫ ┃┫┫
# ┗┻┛ ┗┻┛
安装详情介绍可参考:https://www.pycharm.com.cn/
基础语法
默认情况下,Python 3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串。 当然你也可以为源码文件
第一个字母必须是字母或者下划线
保留字
有一些单词被赋予了特定的意义,这些单词在给任何对象命名的时候都不可以使用
查看所有保留字
import keyword
print(keyword.kwlist
import keyword
print(keyword.kwlist
行与缩进
查看变量的内存地址
id(obj)
查看对象的数据类型
type(obj)
模块导入
import
导入整个模块
from...import
导入模块的指定成员
数字类型
int (整数), 如 1, 只有一种整数类型 int,表示为长整型,没有 python2 中的 Long。
bool (布尔), 如 True
float (浮点数), 如 1.23、3E-2
注:浮点数的计算存在误差,例如,
n1 = 1.1
n2 = 2.2
print(n1 + n2)
>>>3.300000000000003
n1 = 1.1
n2 = 2.2
print(n1 + n2)
>>>3.300000000000003
解决方法:
导入decimal模块
from decimal import Decimal
print(Decimal("1.1")+Decimal("2.2"))
>>>3.3
导入decimal模块
from decimal import Decimal
print(Decimal("1.1")+Decimal("2.2"))
>>>3.3
complex (复数), 如 1 + 2j、 1.1 + 2.2j
字符串
字符串不可改变,python允许空字符串出现,不包含任何字符,且长度为0
函数
len()
计算字符串包含多少字符
d='abc 啦啦啦'
len(d)
>>>6
len(d)
>>>6
字符串拼接
使用+将多个字符串拼接起来。例如:’aa’+ ’bb’ ==>’aabb’
将多个字面字符串直接放到一起实现拼接。例如:’aa’’bb’==>’aabb’
字符串复制
使用*可以实现字符串复制:
>>> a = 'Sxt'*3
>>> a
'SxtSxtSxt'
>>> a = 'Sxt'*3
>>> a
'SxtSxtSxt'
end=''
不换行打印,end = “任意字符串”:
>>>print("sxt",end='##')
sxt##
>>>print("sxt",end='##')
sxt##
input()
输入内容
replace()
字符串替换
>>>a='abcde'
>>>a=a.replace('c','h')
'abhde'
>>>a=a.replace('c','h')
'abhde'
split()
字符串分割
可以基于指定分隔符将字符串分隔成多个子字符串(存储到列表中)。如果不指定分隔
符,则默认使用空白字符(换行符/空格/制表符)
符,则默认使用空白字符(换行符/空格/制表符)
>>> a = "to be or not to be"
>>> a.split()
['to', 'be', 'or', 'not', 'to', 'be']
>>> a.split('be')
['to ', ' or not to ', '']
>>> a.split()
['to', 'be', 'or', 'not', 'to', 'be']
>>> a.split('be')
['to ', ' or not to ', '']
join()
字符串合并
与split相反
>>> a = ['sxt','sxt100','sxt200']
>>> '*'.join(a)
'sxt*sxt100*sxt200'
>>> '*'.join(a)
'sxt*sxt100*sxt200'
查找
startwith()
以指定字符串开头
>>>a='abcde'
>>>a.startwith('a')
True
>>>a.startwith('a')
True
endwith()
以指定字符串结尾
>>>a='abcde'
>>>a.endwith('e')
True
>>>a.endwith('e')
True
find(str)
第一次出现指定字符的位置
>>>a='abcdeabcde'
>>>a.find('c')
2
>>>a.find('c')
2
如果str不在string中,则返回-1
rfind()
最后一次出现指定字符的位置
>>>a='abcdeabcde'
>>>a.rfind('c')
7
>>>a.rfind('c')
7
如果str不在string中,则返回-1
index(str, beg=0, end=len(string))
str – 指定检索的字符串;beg – 开始索引,默认为0;end – 结束索引,默认为字符串的长度。
返回指定字符的位置索引
该方法与 python find()方法一样,只不过如果str不在 string中会报一个异常
rindex(str, beg=0 end=len(string))
返回子字符串 str 在字符串中最后出现的位置,如果没有匹配的字符串会报异常
count()
指定字符出现了几次
>>>a='abcdeabcde'
>>>a.count('c')
2
>>>a.count('c')
2
strip()
去除首尾指定信息
>>> "*s*x*t*".strip("*")
's*x*t'
>>> " sxt ".strip()
'sxt'
's*x*t'
>>> " sxt ".strip()
'sxt'
lstrip()
去除字符串左边指定信息
>>> "*s*x*t*".lstrip("*")
's*x*t*'
's*x*t*'
rstrip()
去除字符串右边指定信息
>>> "*s*x*t*".rstrip("*")
'*s*x*t'
'*s*x*t'
max()
返回字符串中最大的字母
min()
返回字符串中最小的字母
translate(table)
table – 翻译表,翻译表是通过 maketrans() 方法转换而来
translate()函数做的就是接收一个映射表,然后把字符串中含有的映射表的键全都换成映射的值
>>>import string
>>>a='abcde'
>>>c='12345'
>>>s=str.maketrans(a,c)
>>>d='you are being cab default'
>>>print(d.translate(s))
'you 1r5 25ing 312 45f1ult'
>>>a='abcde'
>>>c='12345'
>>>s=str.maketrans(a,c)
>>>d='you are being cab default'
>>>print(d.translate(s))
'you 1r5 25ing 312 45f1ult'
encode(encoding=‘UTF-8’,errors=‘strict’)
以指定的编码格式编码字符串。errors参数可以指定不同的错误处理方案。
encoding – 要使用的编码,如: UTF-8。errors – 设置不同错误的处理方案。默认为 ‘strict’,意为编码错误引起一个UnicodeError。 其他可能得值有 ‘ignore’, ‘replace’,‘xmlcharrefreplace’, ‘backslashreplace’ 以及通过 codecs.register_error() 注册的任何值
判断
isalnum()
是否为字母或数字
isalpha()
是否只由字母组成(含汉字)
isdigit()
是否只由数字组成
isspace()
是否为空白符
isupper()
是否为大写字母
islower()
是否为小写字母
大小写转换
capitalize()
产生新的字符串,首字母大写,其他小写
>>>a='abc aBBD'
>>>a.capitatize()
'Abc abbd'
>>>a.capitatize()
'Abc abbd'
title()
产生新的字符串,每个单词都首字母大写,其他小写
>>>a='abc aBBD'
>>>a.title()
'Abc Abbd'
>>>a.title()
'Abc Abbd'
upper()
产生新的字符串,所有字符全转成大写
>>>a='abc aBBD'
>>>a.upper()
'ABC ABBD'
>>>a.upper()
'ABC ABBD'
lower()
产生新的字符串,所有字符全转成小写
>>>a='abc aBBD'
>>>a.lower()
'abc abbd'
>>>a.lower()
'abc abbd'
swapcase()
产生新的字符串,所有字母大小写转换
>>>a='abc aBBD'
>>>a.swapcase()
'ABC Abbd'
>>>a.swapcase()
'ABC Abbd'
格式排版
center(width[, fillchar])
字符串居中,指定字符填补,默认空,如果指定的长度小于字符串的长度则返回原字符串
>>> a="SXT"
>>> a.center(10,"*")
'***SXT****'
>>> a.center(10)
' SXT '
>>> a.center(10,"*")
'***SXT****'
>>> a.center(10)
' SXT '
ljust(width[, fillchar])
字符串居左,指定字符填补,默认空,如果指定的长度小于字符串的长度则返回原字符串
>>> a.ljust(10,"*")
'SXT*******'
'SXT*******'
rjust(width[, fillchar])
字符串居右,指定字符填补,默认空,如果指定的长度小于字符串的长度则返回原字符串
>>> a.rjust(10,"*")
'*******SXT'
'*******SXT'
zfill(width)
返回指定长度的字符串,原字符串右对齐,前面填充0
>>>a.zfill(5)
'00SXT'
'00SXT'
索引
字符串首个字符索引为0,之后为1、2、3...
字符串末尾字符索引为-1,往前为-2、-3...
切片slice
[起始偏移量 start:终止偏移量 end:步长 step]
[:]
提取整个字符串
[start:]
从 start 索引开始到结尾
[:end]
从头开始知道 end-1
[start:end]
从 start 到 end-1
[start:end:step]
从 start 提取到end-1,步长是 step
基本数据类型
变量不需要声明,使用前必须赋值,赋值后才会创建
变量无类型
多个变量赋值
a=b=c=1
a, b, c = 1, 2, "runoob"
标准数据类型
List(列表)
Dictionary(字典)
Set(集合)
Number(数字)
String(字符串)
Tuple(元组)
其他
type()不会认为子类是一种父类类型
isinstance()会认为子类是一种父类类型
使用del语句删除一些对象引用
1、Python可以同时为多个变量赋值,如a, b = 1, 2。2、一个变量可以通过赋值指向不同类型的对象。3、数值的除法包含两个运算符:/ 返回一个浮点数,// 返回一个整数。4、在混合计算时,Python会把整型转换成为浮点数。
Python数据类型转换
int(x [,base]) 将x转换为一个整数
float(x) 将x转换到一个浮点数
complex(real [,imag])创建一个复数
str(x)将对象 x 转换为字符串
repr(x)将对象 x 转换为表达式字符串
eval(str)用来计算在字符串中的有效Python表达式,并返回一个对象
tuple(s)将序列 s 转换为一个元组
list(s)将序列 s 转换为一个列表
set(s)转换为可变集合
dict(d)创建一个字典。d 必须是一个序列 (key,value)元组。
frozenset(s)转换为不可变集合
chr(x)将一个整数转换为一个字符
print(chr(0b100111001011000))
>>>乘
>>>乘
二进制数字前面加上“0b”是为了识别为二进制;“0o”为八进制;“0x”为十六进制;默认为十进制
ord(x)将一个字符转换为它的整数值
print(ord("乘"))
>>>20056
>>>20056
hex(x)将一个整数转换为一个十六进制字符串
oct(x)将一个整数转换为一个八进制字符串
注释
Python中单行注释以 # 开头
多行注释用三个单引号 ''' 或者三个双引号 """ 将注释括起来
算术运算
+
两个对象相加
-
两个对象相减
*
两个数相乘或是返回一个被重复若干次的字符串
/
x 除以 y
%
取模 - 返回除法的余数
**
幂 - 返回x的y次幂
a**b 为a的b次方
//
取整除 - 向下取接近商的整数
位运算
&
按位与
参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0。
|
按位或
只要对应的二个二进位有一个为1时,结果位就为1,否则为0。
^
按位异或
当两对应的二进位相异时,结果为1,否则为0。
~
按位取反
对数据的每个二进制位取反,即把1变为0, 把0变为1。
<<
左移运算
运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位0丢弃,低位补0。
>>
右移运算
把">>"左边的运算数的各二进位全部右移若干位,">>"右边的数指定移动的位数,正数补0,负数补1
赋值运算
=
最基本的赋值运算
+=
加赋值
x+=y 相当于 x=x+y
-=
减赋值
x-=y 相当于 x=x-y
*=
乘赋值
x*=y 相当于 x=x*y
/=
除赋值
x/=y 相当于 x=x/y
%=
取余数赋值
x%=y 相当于 x=x%y
**=
幂赋值
x**=y 相当于 x=x**y
//=
取整数赋值
x//=y 相当于 x=x//y
逻辑运算
==
等于
>
大于
<
小于
>=
大于等于
<=
小于等于
!=
不等于
成员运算
in
包含
not in
不包含
身份运算
is
是
is not
非
is 与 == 区别
python是一种面向对象的语言,python中对象包含三种基本要素:id(返回的是对象的地址)、type(返回的是对象的数据类型)及value(对象的值)
is比较的是两个对象的地址值,也就是说两个对象是否为同一个实例对象;而==比较的是对象的值是否相等,其调用了对象的__eq__()方法。
字符串驻留机制
仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串驻留池中。Python 支持字符串驻留机制,对于符合标识符规则的字符串(仅包含下划线(_)、字母和数字)会启用字符串驻留机制驻留机制
>>> a = "abd_33"
>>> b = "abd_33"
>>> a is b
True
>>> c = "dd#"
>>> d = "dd#"
>>> c is d
False
>>> str1 = "aa"
>>> str2 = "bb"
>>> str1+str2 is "aabb"
False
>>> str1+str2 == "aabb"
True
>>> b = "abd_33"
>>> a is b
True
>>> c = "dd#"
>>> d = "dd#"
>>> c is d
False
>>> str1 = "aa"
>>> str2 = "bb"
>>> str1+str2 is "aabb"
False
>>> str1+str2 == "aabb"
True
字符串格式化
%操作符
>>>name=Bob
>>>print('Hello, %s' % name)
"Hello,Bob"
>>>print('Hello, %s' % name)
"Hello,Bob"
str.format
>>>name=Bob
>>>print('Hello, {}'.format(name))
"Hello,Bob"
>>>print('Hello, {}'.format(name))
"Hello,Bob"
>>> b = "名字是:{0},年龄是{1}。{0}是个好小伙"
>>> b.format("高淇",18)
'名字是:高淇,年龄是 18。高淇是个好小伙'
>>> c = "名字是{name},年龄是{age}"
>>> c.format(age=19,name='高淇')
'名字是高淇,年龄是 19'
>>> b.format("高淇",18)
'名字是:高淇,年龄是 18。高淇是个好小伙'
>>> c = "名字是{name},年龄是{age}"
>>> c.format(age=19,name='高淇')
'名字是高淇,年龄是 19'
f-Strings
>>>name=Bob
>>>print(f'Hello, {name}!')
"Hello,Bob"
>>>print(f'Hello, {name}!')
"Hello,Bob"
Template
>>> from string import Template
>>> t = Template('Hey, $name!')
>>> t.substitute(name=name)
'Hey, Bob!'
>>> t = Template('Hey, $name!')
>>> t.substitute(name=name)
'Hey, Bob!'
数字格式化
浮点数通过 f,整数通过 d 进行需要的格式化
数字 格式 输出 描述
3.1415926 {:.2f} 3.14 保留小数点后两位
3.1415926 {:+.2f} 3.14 带符号保留小数点后两位
2.71828 {:.0f} 3 不带小数
5 {:0>2d} 05 数字补零 (填充左边, 宽度为 2)
5 {:x<4d} 5xxx 数字补 x (填充右边, 宽度为 4)
10 {:x<4d} 10xx 数字补 x (填充右边, 宽度为 4)
1000000 {:,} 1,000,000 以逗号分隔的数字格式
0.25 {:.2%} 25.00% 百分比格式
1000000000 {:.2e} 1.00E+09 指数记法
13 {:10d} 13 右对齐 (默认, 宽度为 10)
13 {:<10d} 13 左对齐 (宽度为 10)
13 {:^10d} 13 中间对齐 (宽度为 10)
3.1415926 {:.2f} 3.14 保留小数点后两位
3.1415926 {:+.2f} 3.14 带符号保留小数点后两位
2.71828 {:.0f} 3 不带小数
5 {:0>2d} 05 数字补零 (填充左边, 宽度为 2)
5 {:x<4d} 5xxx 数字补 x (填充右边, 宽度为 4)
10 {:x<4d} 10xx 数字补 x (填充右边, 宽度为 4)
1000000 {:,} 1,000,000 以逗号分隔的数字格式
0.25 {:.2%} 25.00% 百分比格式
1000000000 {:.2e} 1.00E+09 指数记法
13 {:10d} 13 右对齐 (默认, 宽度为 10)
13 {:<10d} 13 左对齐 (宽度为 10)
13 {:^10d} 13 中间对齐 (宽度为 10)
条件控制
if语句
while循环
while 循环使用 else 语句
for循环
break和continue语句及循环中的else子句
pass 语句
文件读写
open
打开文件
fp=open('D:/text.txt','a+')
在文件里输入内容
print("helloworld",file=fp)
close
关闭文件
fp.close()
文件打开模式
r
以只读模式打开文件,并将文件指针指向文件头;如果文件不存在会报错
r+
在r的基础上增加了可写功能
注:r+会覆盖当前文件指针所在位置的字符,如原来文件内容是"Hello,World",打开文件后写入"hi"则文件内容会变成"hillo, World"
w
以只写模式打开文件,并将文件指针指向文件头;如果文件存在则将其内容清空,如果文件不存在则创建
w+
在w的基础上增加了可读功能
注:w+与r+的不同是,w+在打开文件时就会先将文件内容清空,不知道它有什么用
a
以只追加模式打开文件,并将文件指针指向文件尾部,若文件不存在则创建
a+
在a的基础上增加了可读功能
注:a+与r+的不同是,a+只能写到文件末尾(无论当前文件指针在哪里)
b
在读写而二进制文件,需要与上面几种模式搭配使用,如ab,wb,ab+
文件读取的方法
read()
一次读取文件所有内容,返回一个str
或
每次最多读取指定长度的内容,返回一个str
或
每次最多读取指定长度的内容,返回一个str
readlines()
一次读取文件所有内容,按行返回一个list
readline()
每次只读取一行内容
seek(n)
将指针移动到指定字节的位置
tell()
获取当前文件指针所在字节的位置
flush()
刷新缓冲区数据,将缓冲区的数据立即写入文件
next()
返回文件下一行,这个方法也是file对象实例可以被当做迭代器使用的原因
write(n)
将字符串写入文件,没有返回值
转义字符
\n
换行
\r
回车
回到该行初始位置
print("hello\rworld)
>>>world
print("hello\rworld)
>>>world
\t
制表符
每4个字符,为一个制表位,如果四个字符占满,则重新计算一个制表位
print("hello\tworld")
>>>hello world
print("helloooo\tworld")
>>>helloooo world
print("hello\tworld")
>>>hello world
print("helloooo\tworld")
>>>helloooo world
\b
退格
print("hello\bworld")
>>>hellworld
>>>hellworld
\
反斜线
对特殊字符进行转义
print("老师说:\"大家好\"")
r或R
原字符,不希望字符串中的转义字符起作用,就在字符串前加上r或R
print(r'hello\nworld')
>>>hello\nworld
>>>hello\nworld
Python高级编程
面向对象
初级
ADT
面向对象基本概念、类与对象的成员(属性和方法))
三大特性
封装
继承与派生
多态与抽象基类
高级
类
class 类名:
类体
类体
类名必须符合“标识符”的规则;一般规定,首字母大写,多个单词使用“驼峰原则”。
类体中我们可以定义属性和方法。
属性用来描述数据,方法(即函数)用来描述这些数据相关的操作
>>>class Student:
>>> company = "SXT" #类属性
>>> count = 0 #类属性
>>> def __init__(self,name,score):
>>> self.name = name #实例属性
>>> self.score = score
>>> Student.count = Student.count+1
>>> def say_score(self): #实例方法
>>> print("我的公司是:",Student.company)
>>> print(self.name,'的分数是:',self.score)
>>>s1=Student('小明',10)
>>>s1.say_score()
'我的公司是: SXT'
'小明 的分数是: 10'
>>> company = "SXT" #类属性
>>> count = 0 #类属性
>>> def __init__(self,name,score):
>>> self.name = name #实例属性
>>> self.score = score
>>> Student.count = Student.count+1
>>> def say_score(self): #实例方法
>>> print("我的公司是:",Student.company)
>>> print(self.name,'的分数是:',self.score)
>>>s1=Student('小明',10)
>>>s1.say_score()
'我的公司是: SXT'
'小明 的分数是: 10'
init()
名称固定,必须为:init()
第一个参数固定,必须为:self。 self 指的就是刚刚创建好的实例对象
构造函数通常用来初始化实例对象的实例属性,如下代码就是初始化实例属性:name和 score
通过“类名(参数列表)”来调用构造函数。调用后,将创建好的对象返回给相应的变量。
比如:s1 = Student(‘小明’, 10)
比如:s1 = Student(‘小明’, 10)
init()方法:初始化创建好的对象,初始化指的是:“给实例属性赋值”
new()方法: 用于创建对象,但我们一般无需重定义该方法
如果我们不定义__init__方法,系统会提供一个默认的__init__方法。如果我们定义了带参的__init__方法,系统不创建默认的__init__方法
高级语法
函数进阶
作为参数传递
作为返回值
模块与包&自定义第三方模块
异常处理机制&自定义异常类
迭代器和生成器
自定义上下文管理器
并发与多线程
并发基本原理与进程理论基础
创建多进程
进程间通信原理
线程理论基础,同步互斥基本原理
详解python的GIL的线程锁
并发网络通信模型
IO并发:阻塞IO、非阻塞IO、IO多路复用、异步IO
IO网络编程
Python文件处理
字节串与文件的读写操作
文件读写的其他操作
文件管理函数
网络编程基础与OSI模型详解
传输层服务
面向连接的传数服务
面向无连接的传数服务
socket套接字编程
tcp套接字
udp套接字
http协议基础概念详解
正则表达式
基础概念及元字符使用、正则匹配规则
Python re模块
Python爬虫
爬虫基础
网页解析
数据抓取
userAgent
以谷歌为例,地址栏输入about:version,找到“用户代理”字段
打开任意网页,查看源码,点击network,随便点击一个浏览器请求,点击headers,下滑找到UserAgent,如果没有,换个请求查找。
代理库:faker
from faker import Factory
f = Factory.create()
headers = {
'user-agent': f.user_agent()
}
f = Factory.create()
headers = {
'user-agent': f.user_agent()
}
爬虫核心技巧
urllib
urllib.request
请求网址
urllib.request.Request(url,headers=header)
str.add_header()
向请求中添加请求头
urllib.request.urlopen()
打开网址
response.read().decode('utf-8')
读取网址,并解码
urllib.parse
urllib.parse.quote()
将汉字变为unicode格式
urllib.parse.urlencode().encode('utf-8)
编码
1:get请求方式的参数必须编码,参数是拼接到url后面,编码之后不需要调用encode方法
2:post请求方式的参数必须编码,参数是放在请求对象定制的方法中,编码之后需要调用encode方法。
2:post请求方式的参数必须编码,参数是放在请求对象定制的方法中,编码之后需要调用encode方法。
requests
get
post
header
正则表达式
爬虫进阶
模拟登录
验证码识别
正则表达式
APP 爬取
进阶技能
Beautiful Soup框架
异步加载
Ajax
网页中JavaScript渲染问题
PyQuery
xPath
selenium
反爬
爬虫高阶
Scrapy框架
分布式爬虫
逆向解密
数据分析
数值计算
数组创建
索引/切片/布尔查询
数组运算/变换
随机数操作
数值模拟项目
数据分析
numpy
掌握numpy的核心ndarray
基本操作
创建数据、数据类型和dtype选项
numpy自带的数组高效创建方法
算数运算、矩阵积、自增和自减
函数和聚合函数
索引机制和切片操作
进阶
数组迭代、条件和布尔数组、形状变换
数组操作之连接数组、数组切分
常用概念之对象的副本或视图、向量化和广播机制
结构化数组
二进制文件的读写、文本文件的读写
pandas
基础
基础操作
函数应用和映射、排序和排位次
相关性和协方差、处理NaN数据
等级索引和分级
数据结构
Series对象、Index对象
DataFrame的概念、定义方法,选取元素、赋值、所属关系
索引对象的其他功能
数据结构之间的运算
数据读写
读取csv或文本文件中的数据
用正则表达式解析txt文件、从txt文件中读取部分数据、将数据写入csv文件、写入数据到html文件中
写入数据到html文件中,从互联网网页或网页文件中读取数据
读写Excel文件、读写JSON格式的数据、读写HDF5格式文件
进行python对象序列化读写pickle文件
对接数据库
数据处理
数据合并、数据拼接、组合数据、轴向旋转、如何删除DataFrame列和行
数据转换
删除重复元素
映射替换元素
用映射来添加元素
用映射重命名轴标签
数据离散化、面元划分、数据异常检验和过滤
数据排序、随机取样、部分常用字符串处理方法、正则表达式、数据聚合、组迭代
可视化
Matplotlib可视化
基础
Matplotlib扩展库安装和库架构
Jupyter Notebook的安装和使用
使用关键字参数和处理多个图形的方法
给图表添加更多元素--标题、轴标签、图例
解决绘图中的中文乱码问题
在绘图中处理显示合适的日期数据
进阶
深入理解绘制图表的内容,例如线性图
绘制直方图--hist()
多样化绘制柱形图
绘制饼图、高级图表
三维图形的绘制,例如mplot3D工具集
绘制子图网格
seaborn可视化
pyechart可视化
Bokeh交互式可视化库
可视化项目
Web开发(前/后端)
前端
深入了解面向对象
只读属性和访问权限
了解多继承的MOR算法
_new_与self
运算符重载和函数重写
深层属性管理
面向对象的底层原理,自定义元类编程
面向对象设计和面向对象编程
六大设计原则
开闭原则
单一职责
依赖倒转
接口隔离
迪米特法则
里氏替换
创建型模式
简单工厂模式
工厂方法模式
抽象工厂模式
建造者模式
原型模式
单例模式
。。。
结构型模式
适配器模式
装饰模式
行为型模式
解释器模式
责任链模式
MySQL数据库
MySQL基本了解和环境搭建
SQL语句
数据库管理
MySQL数据类型
数据表管理
表数据基本操作之CRUD
查询语句
聚合操作
索引操作
外键约束和表关联关系
MySQL视图
函数与存储过程
数据库事务控制
服务器与客户端
服务器与客户端原理和技术
CS和BS架构
HTML
什么是HTML和基本结构
注释及网页头部标签使用
常用的字符实体及标题文字
img标签的使用及标签属性
常用块级元素及行级元素、超链接及属性、列表、表格、表单元素、选项框元素
多媒体等进阶内容
CSS
CSS介绍及基本使用
属性及基本布局演示
样式表的使用方式
选择器、样式优先级规则、列表、表单的使用
盒子模型
显示特性、元素溢出、表格元素及相关样式
CSS定位、权重
PS辅助测量与取色
前端页面开发流程
JS
JavaScript基本了解和使用
变量、数据类型及基本语法规范
运算符、函数、条件语句、对象
获取和操作元素的方法、事件属性及匿名函数
数组及操作方法
循环语句、字符串、调试
定时器、变量作用域、正则
预解析
后端
企业级微型框架--Flask
基础
Flask、web farmework、WSGI、jinjia2是什么
虚拟环境搭建、Flask安装
Flask基本使用
Flask路由
路由的使用
正则转换器、接收请求参数
跳转方式
模板使用--jinjia2
数据传递
过滤器-测试器
逻辑处理
模板继承、全局错误视图
Flask-model
model定义、字段类型
CURD,分页
关联关系:1对1、1对多、多对多
状态保持
cookie、session
静态资源的使用和响应
企业级开发框架--Django
入门
Django的安装和虚拟环境搭建
Django项目创建
模板templates的使用
创建APP的核心操作
Django视图和URL路由配置
MTV模式和基本开发流程
URL路由的基本操作和进阶
请求处理
Django模型进阶
model层的开发过程
模型字段的高级使用
model层的核心操作
model的关联关系
基本查询
条件查询
聚合操作
关联关系下的常见操作
请求与响应
请求对象和响应对象的使用
view跳转的高级使用
cookie和session的使用
反向解析
Django模板必备知识
模板的基本使用方法
DTL的基本使用、标签的使用
静态资源的管理方式
linux系统
环境搭建
MySQL、linux-Python等软件的安装
操作指令
文件基本操作指令
用户、组管理指令
文件属性操作指令
查进程相关指令及VI指令
网络相关指令
软件安装指令
生产环境及项目部署
Django安装、wsgi协议、uwsgi服务器安装使用
在uwsgi中部署Django项目
Nginx使用
负载均衡-动静分离
redis数据库
基础
什么是NoSQL、Redis,传统结构模式及分布式结构
Redis数据库安装及基本数据类型
数据类型-持久化
数据类型
持久化操作
集群搭建
aof重写
Redis集群搭建
Python-Redis客户端-JSON序列化
JSON解析、通信完整代码演示
Redis-Django-View缓存
Redis-Django模板缓存、session管理
自动化测试
基础
自动化测试基本认识
环境搭建
python入门
Selenium
Webdriver自动化原理、HTML和Web元素、Beautifulsoup
frame切换、css选择器、选择框的操作
xpath
浏览器查看信息
弹出框处理
web自动化实战
Appium
Appium自动化原理和环境搭建、自动化配置项
界面元素的查看、选择app界面元素
xpath
UIAutomator API
滑动界面操作
WebView自动化
通知和案件操作
API接口
基础概念、HTTP协议
Postman工具构造API请求和文档等操作
接口测试流程
cookie、session、token
Python数据库操作
API测试自动化
RF
RF自动化测试的常见操作
机器学习
数据预处理
特征工程
特征选择
特征融合
Hadoop分布式系统基础架构
基础操作和核心原理
Hive数据仓库工具原理和常见操作
Sqoop数据ETL工具
Hbase分布式存储系统
原理、架构、基本组件、数据结构、表
安装部署、常用操作、SQL工具、Phoenix、升级和数据迁移、Shell常用命令、Hive
Spark
Spark分布式内存计算
Spark原理、与Hadoop的区别、Spark生态圈
Spark MLlib机器学习
Spark GraphX图计算
Spark Streaming流式计算
Spark编程及常用函数
Spark分布式集群环境安装搭建
Spark分布式机器学习
Word2Vec词向量模型
learning to rank排序学习算法
逻辑回归算法
决策树算法
随机森林算法
GBDT梯度提升决策树算法
SVM支持向量机算法
贝叶斯算法
序列模式挖掘prefixSpan算法
算法模型
监督学习
分类
K-近邻算法
决策树
朴素贝叶斯算法
Logistic 回归
SVM 支持向量机
CART 分类树
Softmax 回归
回归
线性回归
CART 回归树
集成学习
Boosting
随机森林
AdaBoost
GBDT
XGBoost
无监督学习
聚类
K-means
层次聚类
模型评估
准确率
召回率
P-R 曲线
ROC
AUC
MSE
深度学习
深度学习基础
层次结构
输入层
卷积层
标准卷积
空洞卷积
分组卷积
可变形卷积
可分离卷积
池化层
定义
pooling层是仿照人的视觉系统进行降维(降采样),用更高层的抽象表示图像特征。
作用
下采样
降维
减少参数
避免过拟合,提高模型泛化能力
类型
平均池化
计算图像区域的平均值作为该区域池化后的值
最大池化
选图像区域的最大值作为该区域池化后的值
函数
MaxPooling1D
对时序数据的最大池化
MaxPooling2D
对空域数据的最大池化
MaxPooling3D
对3D(空域,或时空域)数据的最大池化
AveragePooling1D
对时序数据的平均池化
AveragePooling2D
对空域数据的平均池化
AveragePooling3D
对3D(空域,或者时空域)数据的平均池化
GlobalMaxPool1D
对时序数据的全局最大池化
GlobalMaxPool2D
对空域数据的全局最大池化
GlobalMaxPool3D
对3D(空域,或者时空域)数据的全局最大池化
GlobalAveragePooling1D
对时序数据的全局平均池化
GlobalAveragePooling2D
对空域数据的全局平均池化
GlobalAveragePooling3D
对3D(空域,或者时空域)数据的全局平均池化
上采样层
双线行插值
转置卷积(反卷积)
反池化
全链接层
损失函数
zero one loss
cross entropy loss
mse loss
logistic loss
focal loss
center loss
wing loss
dice loss
hinge loss
arcface loss
激活函数
Sigmoid
分支主题
relu
分支主题
tanh
分支主题
ReLU
Leaky ReLU
分支主题
softmax
分支主题
优化器
SGD
随机梯度下降算法
SGDM
随机梯度下降算法-动量优化
NAG
牛顿加速梯度算法
AdaGrad
自适应学习率优化算法
AdaDelta
自适应学习率优化算法
Adam
自适应学习率优化算法
Nadam
自适应学习率优化算法
什么是优化器
过拟合解决办法
数据增强
几何变换
1. 水平镜像
2. 垂直镜像
3. 水平垂直镜像
4. 平移
5. 旋转
6. 裁剪
7. 仿射变换
颜色变换
色彩增强(通过调节对比度和亮度)
噪声注入
高斯噪声
混合图像
随机擦除
生成对抗网络(GAN)生成数据
输入端
噪声增强
模型上
L1/L2范数正则化
增加Dropout层
作用原理
增加BN层
BN和Dropout一起使用时会产生负面影响
训练策略
早停
特征选择/降维
梯度消失和梯度爆炸
产生原因
不合适的激活函数
初始化权值过大
解决方案
用其他激活函数替换sigmoid
利用BN将分布变换到激活函数敏感的区域
优化技巧
归一化
输入归一化
1.零均值;2.方差归一化
批归一化(BN)
1.求均值;2.求标准差;3.一个batch内归一化
优点
加快训练速度
防止梯度消失
防止过拟合
缺点
batch很小时效果不好
适用于深度固定的神经网络,对RNN无效
层归一化(LN)
对同一层神经元的输入进行归一化,不同的输入样本有不同的均值和方差
实例归一化(IN)
对每个样本进行归一化,注重单个样本分布的均匀和独立,适用于图像风格化
组归一化(GN)
在BN的基础上,将channel分为group,每个group内归一化,解除batchsize的影响
卷积神经网络(CNN)
层级结构
输入层
去均值
归一化
PCA/白化
卷积层
特点
局部连接
参数共享
深度表达
分类
普通卷积
1*1卷积
用多个小卷积核代替大卷积核
转置卷积
反卷积
上采样方法
双线性插值
反卷积
反池化
激活层
激活函数
池化层
全连接层
图片分类
评价指标
准确率
正确分类样本占总样本比例
混淆矩阵
根据TP/TN/FP/FN计算,每个类别预测情况的记录
PR曲线
指标
精确率(precision)
召回率(recall)
评价方式
取P=R时的平衡点值,越大越好
曲线越往右上越好
曲线下方的面积大小,越大越好
计算F1-score,值越大越好
ROC曲线
绘图方式
固定不同的分类阈值,测试假正类率和真正类率(召回率)
评价方式
ROC曲线越接近左上角,该分类器的性能越好
AUC,ROC曲线下方面积
适用于样本不均衡
经典网络结构
LeNet(1995)
代表性网络:LeNet-5
介绍:用于手写字符识别
AlexNet(2012)
介绍:获得了ILSVRC 2012年的冠军,引入dropout、relu
VGGNet(2014)
代表性网络:VGG-16、VGG-19
介绍:全部使用3*3的小卷积核,通过加深网络结构来提升性能,引入多尺度训练
GoogLeNet(2014)
代表性网络:
Inception V1
Inception V2
BN层
Inception V3(2015)
Inception V4(2016)
Inception-ResNet-v2(2016)
ResNet(2015)
代表性网络:ResNet-50
DenseNet(2017)
介绍:2017CVPRBestPaper,将每一层卷积后的特征都加起来
SENet(2017)
介绍:ImageNet 2017冠军,在channels的维度上加入attention机制,压缩和提取
应用难点
小样本
迁移学习
数据生成
主动学习
样本不均衡
数据采集达到均衡
对类别设置优化权重
focal loss
改进方向
设置权重
特征融合
网络更深、特征图更大
目标检测网络
两阶段检测模型
RCNN家族
RCNN
Fast R-CNN
Faster R-CNN
Mask R-CNN
FAF R-CNN
一阶段检测模型
YOLO家族
YOLO v1
......
YOLO v5
SSD家族
SSD
DSSD
FSSD
ESSD
DES
...
RFCN家族
FPN家族
RetinaNet家族
Anchor-free家族
Others
目标分割
目标跟踪
轻量化网络
循环神经网络(RNN)
RNN
LSTM
GRU
BRNN
NTM
seq2seq
RNN+CTC
生成对抗网络(GAN)
GAN
DCGAN
CGAN
CycleGAN
CoGAN
ProGAN
WGAN
SAGAN
BigGAN
StyleGAN
图神经网络(GNN)
GCNN
DCNN
ChebNet
......
深度学习框架
Tensorflow
Pytorch
Paddle
收藏
收藏
0 条评论
下一页