python知识总览

Python

  • 开发环境的搭建与使用

    • 安装扩展库pip
      • pip download SomePackage[==version] 下载扩展库的指定版本,不安装
      • pip freeze[>requirments.txt] 列出已安装模块及版本号
      • pip list 列出当前已经安装的所有模块
      • pip install SomePackage[==version] 在线安装SomePackage模块的指定版本
      • pip install SomePackage.whl 通过whl文件离线安装扩展库
      • pip install package1 package2 ... 依次(在线)安装package1,package2等扩展模块
      • pip install -r requirements.txt 安装requirements.txt文件中的指定的扩展库
      • pip install --upgrade SpmePackage 升级SomePackage模块
      • pip uninstall SomePackage[==version] 卸载SomePackage模块的指定版本
    • 标准库与扩展库中对象的导入与使用
      • import 包名/模块名 [as 别名]
      • from 包名/模块名 import 模块名/对象名 [as 别名]
      • from 模块名 import *
    • __name__属性

  • 运算符、表达式与内置对象

    • 常用内置对象
      • 总览
        • 数字整数大小没有限制,内置支持复数及其运算
          • int
          • float
          • complex
        • 字符串
          • str
          • 使用单引号,双引号,三引号作为定界符,以字符r和R引导的表示原始字符串
        • 字节串
          • bytes
          • 以字符b引导,可以使用单引号,双引号,三引号作为定界符
        • 列表
          • list
          • 所有元素放在一对方括号中,元素之间用逗号分隔,其中的元素可以是任意类型
        • 字典
          • dict
          • 所有元素放在一对花括号中,元素之间使用逗号分隔,元素形式为"键:值"
        • 元组
          • tuple
          • 所有元素放在一对圆括号中,元素之间用逗号分隔,如果元组中只有一个元素,后面的逗号不能省略
        • 集合
          • set
          • 所有元素放在一对花括号中,元素之间使用逗号分隔,元素不重复且可哈希
        • 布尔型
          • bool
          • 逻辑值,关系运算符、成员测试运算符、同一性测试运算符组成的表达式的值为TRUE或FALSE
        • 空类型
          • None
          • 空值
        • 异常
          • Python内置大量异常,分别对应不同类型的异常
        • 文件
          • open是Python的内置函数,使用指定模式打开文件,返回文件对象
        • 迭代器对象
          • 生成器对象,zip对象,enumerate对象,map对象,filter对象
          • 具有惰性求值的特点,每个元素只能使用一次
        • 编程单元
          • 函数(使用def定义)类(使用class定义)模块(类型为module)
          • 类和函数都属于可调用对象,模块用来集中存放函数、类、常量或其他对象
      • 常量与变量
        • 所谓常量,一般是指不需要改变也不能改变的字面值
        • 变量的值是可以变化的在Python中,不需要事先声明变量名及其类型,直接赋值即可创建任意类型的变量。不仅变量的值可以变化的,变量的类型也是随时可以发生变化的
        • Python采用基于值的内存管理模式赋值过程:首先把等号右侧的表达式的值计算出来,然后在内存中寻找一个位置把值存放进去,最后创建变量并指向这个内存地址
        • Python中的变量并不直接存储值,而是存储值的内存地址或者引用
        • Python是一个不折不扣的强类型编程语言
        • 定义
          • 字母数字下划线,数字不开头,关键字不做变量名,大小写敏感
      • 数字
        • 内置的整数、实数与复数
          • 应尽量避免在实数之间直接进行相等性测试,而应该以两者之差的绝对值是否足够小作为两个实数是否相等的依据
          • 在数字的算术运算表达式求值时会进行隐式的类型转换
          • Python 3.6.0开始支持在数字中间位置使用单个下划线作为分隔对数字分组来提高数字的可读性,类似于数学上使用逗号作为千位分隔符
          • pow() 幂乘math.isclose() 判相等abs() 绝对值 计算复数的模
        • 分数
          • python 标准库fractions中的Fraction对象支持分数运算
          • Fraction(分子,分母)
          • numerator 分子denominator 分母
        • 高精度实数
          • 标准库fractions和decimal中提供的Decimal类实现了更高精度运算,Decimal支持整数的四则运算,不支持与内置实数运算
          • Decimal(数字)
          • getcontext().prec= 设置更高精度
      • 字符串与字节串
        • Python 3.x除了支持Unicode编码的str类型字符串外,还支持字节串类型bytes,对str类型的字符串调用encode()方式编码得到bytes字节串,对bytes字节串调用其decode("编码格式")方法指定正确的编码格式则得到str字符串
      • 列表,元组,字典,集合
        • 子主题
        • Python还提供了map,zip,filter,enumerate,reversed等大量迭代器对象(迭代器对象可以理解为数据流的对象,每次返回一个数据)
    • 运算符与表达式
      • Python是面向对象的程序设计语言,在Python中一切都是对象
      • 在Python中,单个常量或变量可以看做最简单的表达式,使用任意运算符和函数调用连接式子也属于表达式
      • 总览
        • := 赋值运算,海象运算符
        • lambda [para]:expr 定义lambda表达式,功能相当于函数,para相当于函数形参,expr表达式的值相当于函数返回值
        • v1 if cond else v2 用来表示二选一的表达式,其中v1、cond、v2可以为任意表达式,如果cond的值等价于TRUE,则整个表达式的值为v1,否则整个表达式的值为v2,类似于双分支选择结构
        • or "逻辑或"运算符,对于表达式expr1 or expr2为例,如果expr1等价于TRUE则返回expr1,否则返回expr2
        • and "逻辑与"运算符,以expr1 and expr2为例,如果expr1的值等价于FALSE则返回expr1的值,否则返回expr1的值
        • not "逻辑非"运算符,对于表达式not x,如果x的值等价于TRUE,则返回FALSE,否则返回TRUE
        • in、not in 测试运算符,表达式x in y的值当且仅当y中包含元素x的值时才会为TRUEis、is not 测试两个对象是否引用同一对象。如果两个对象引用同一个对象,那么它们的内存地址相同>,>=<,<=,==,!= 关系运算符,用于比较大小,作用与集合时表示测试集合的包含关系
        • | "按位或"运算,集合并集
        • ^ "按位异或",集合对称差集
        • & "按位与",集合交集
        • <<、>> 左移位,右移位
        • + 算术加法,列表,元组,字符串合并与连接- 算术减法,集合差集
        • * 算术乘法,序列重复@ 矩阵乘法/ 真除// 整除% 求余数,字符串格式化
        • + 正号- 负号~ 按位取反
        • ** 幂运算
        • [] 下标,切片. 属性访问,成员访问() 函数定义或调用,修改表达式运算顺序,声明多行代码为一个语句
        • []、()、{} 定义列表,元组,字典,定义列表推导式,生成器表达式,字典推导式,集合推导式
      • 算术运算符
        • + 算术加法,列表,元组,字符串的连接,但不支持不同内置对象类型(整数,实数,复数可以)的对象之间的相加或连接
        • * 算术乘法,列表,元组,字符串这几个序列类型与整数的乘法,表示序列中元素引用的重复,生成新的序列对象。字典和集合不支持与整数的相乘,因为其中的元素是不允许重复的
        • /、// 算术除法和算术求整商
        • % 整数求余数(结果符号与除数相同)
        • ** 幂乘,pow()
      • 关系运算符
        • Python关系运算符可以连用,操作数之间必须可比较大小
        • 字符串比较:逐个比较对应位置的字符串,得出结论后立即停止比较列表比较:逐个比较相应位置的元素
        • 集合运算== 测试集合是否相等> 集合包含测试< 真子集测试
      • 成员测试运算符in与同一性测试运算符is
        • 成员测试运算符in,即测试一个对象是否为另一个对象的元素
        • 同一性测试运算符is,用来测试两个对象是否是同一个,是则返回TRUE,否则返回FALSE,如果两个对象是同一个,两者具有相同的内存地址和值
          • 基于值的内存管理,同一个值在内存中只有一份
          • 介于[-5,256]区间的整数在内存中只有一份
          • 引用同一对象,对其中一个的操作会影响另一个
      • 位运算与集合运算符
        • 位运算只能用于整数。首先将整数转换为二进制数,然后右对齐,必要时左侧补0,按位进行运算,最后把结果转换为十进制数字返回
        • 集合的交集,并集,对称差集运算借助于运算符实现,差集使用减号运算符实现
      • 逻辑运算符
        • and和or具有惰性求值或逻辑短路的特点,当连接多个表达式时只计算必须要计算的值
        • 运算符and和or并不一定会返回TRUE或FALSE,而是最后一个被计算的表达式的值
      • 矩阵乘法运算符@
        • Python 3.5后,矩阵乘法运算符"@","@"还可以用来表示修饰器
        • numpy.ones()函数用于生成全1数组,参数表示数组的大小eye()函数用于生成单位数组,对角线全是1,其他全为0
      • 补充说明
        • Python中的等于号"="是不算赋值运算符的,它只是变量名或参数名与表达式之间的分隔符,表示让左侧的变量引用右侧表达式的计算结果
        • Python 3.8 ":="作为真正意义上的赋值运算符
    • Python关键字简要说明
      • False 常量,逻辑假,首字母大写
      • None 常量,空值,首字母大写
      • True 常量,逻辑真,首字母大写
      • and 逻辑与
      • as 在import,with,except语句中给对象起别名
      • assert 断言,用来确定某个条件必须满足,可用来帮助调试程序
      • break 用在循环结构中,提前结束break所在层次的循环
      • class 定义类
      • continue 循环结构中,提前结束本次循环
      • def 函数定义
      • del 用来删除对象或对象成员
      • elif 选择结构,else if的意思
      • else 选择结构,循环结构和异常处理结构中
      • except 异常处理结构中,用来捕获特定类型的异常
      • finally 异常处理结构中,用来表示无论发生什么都会执行的代码
      • from 明确指定从哪个模块中导入什么对象,还可以与yield一起构成yield表达式,以及用于raise...from...语句
      • global 定义全局变量
      • if 用在选择结构中检查条件是否满足或成立
      • import 用来导入模块或模块中的对象
      • in 成员测试
      • is 同一性测试
      • lambda表达式 用来定义lambda表达式,类似于函数
      • nonlocal 用来声明nonlocal常量
      • not 逻辑非
      • or 逻辑或
      • pass 空语句,执行该语句时什么都不做,常用作占位符
      • raise 显式抛出异常
      • return 在函数中用来返回值,如果没有指定返回值,表示返回空值
      • try 在异常处理结构中用来限定可能会引发异常的代码块
      • while 构造while循环结构,只要条件表达式等于TRUE就重复执行限定的代码块
      • with 上下文管理,具有自动管理资源的功能
      • yield 在生成器函数中用来生成值
    • Python常用内置函数
      • 使用help(对象名)查看某个对象的用法,使用help(模块名)查看该模块的帮助文档
      • 总览
        • abs(x,/) 返回数字的绝对值或复数的模
        • aiter() 返回可迭代对象的异步迭代器对象
        • all(iterable,/) 如果可迭代对象iterable的所有元素都等价于TRUE,则返回TRUE,否则返回FALSE,如果可迭代对象为空,返回TRUE
        • anext(iterable,/) 返回异步可迭代对象中的下一个元素,Python3.10新增
        • any(iterable,/) 只要可迭代对象中存在等价于TRUE的元素,返回TRUE,如果为空返回FALSE
        • ascii(obj,/) 返回对象的ASCII码表示形式,进行必要的转义
        • bin(number,/) 返回整数number的二进制形式的字符串  0b
        • bool(x) 如果参数x的值等价于TRUE就返回TRUE,否则返回FALSE
        • callable(obj,/) 如果参数obj为可调用对象就返回TRUE,否则返回FALSE
        • classmethod(function) 修饰器函数,用来将一个实例方法转换为类方法
        • complex(real=0,imag=0) 返回复数,real实部,imag虚部
        • chr(i,/) 返回Unicode编码为i的字符,其中0<=i<=0x10ffff
        • compile(source,filename,mode,flags=0,dont_inherit=False,optimize=-1,*,feature_version=-1) 把Python程序源码伪编译为字节码,可被eval()或exec()执行
        • delattr(obj,name,/) 删除对象obj的name属性,delattr(x,'y')等价于del x.y
        • ☆dict() dict(mapping)dict(iterable) 把可迭代对象iterable转换为字典返回,不加参数时返回空字典。dict(**kwargs) 参数名前面俩星号表示可以接收多个关键参数,键=值形式传参
        • dir([object]) 返回指定对象或模块的成员列表,如果不加参数时返回包含当前作用域内所有可用对象名字的列表
        • divmod(x,y,/) 计算整商和余数,返回元素(x//y,x%y),满足恒等式div*y+mod=x
        • ☆enumerate(iterable,start=0) 枚举可迭代对象中的元素,返回包含元素形式为(start,iterable[0])....的迭代器对象,start表示编号的起始值,默认值为0
        • ☆eval(source,globals=None,locals=None,/) 计算并返回字符串或字节码对象source中表达式的值,参数globals和locals用来指定字符串source中变量的值,如果冲突以locals为准
        • exec(source,globals=None,locals=None,/) 在参数globals和locals指定的上下文中执行source代码或者compile()函数编译得到的字节码对象
        • exit() 结束程序,退出当前Python环境
        • filter(function or None,iterable) 使用可调用对象function描述的规则对iterable中的元素进行过滤,返回filter对象,其中包含iterable中使得可调用对象返回值等于TRUE的哪些元素,如果为none,返回filter对象中包含iterable中国所有等价于TRUE的元素
        • float(x=0,/) 把整数或字符串转换为浮点数,直接调用float()不加参数返回0,0,字符串x无法转换为浮点数时抛出异常
        • format(value,format_spec='',/) 把参数value按照format_spec指定的格式转换为字符串,功能相当于value.__format__(format_spec)
        • getattr(object,name[,default]) 获取对象object的属性,getattr(x,'y')等价于x.y
        • globals() 返回当前作用域中能够访问的所有全局变量名称与值组成的字典
        • hasattr(obj,name,/) 检查对象obj是否含有name属性
        • hash(obj,/) 计算参数的哈希值,如果obj不可哈希抛出异常
        • help(obj) 返回对象obj的帮助信息
        • hex(number,/) 返回整数的十六进制的字符串
        • id(obj,/) 返回对象的内存地址
        • ☆input(prompt=None,/) 输出参数prompt的内容作为提示信息,接收键盘输入的内容,回车表示输入结束,以字符串形式返回输入的内容
        • ☆int([x]) 返回实数x的整数部分,int()返回0int(x,base=)  把字符串x看做base进制数并转换为10进制数
        • isinstance(obj,class_or_tuple,/) 测试对象obj是否属于指定类型的实例
        • issubclass(cls,class_or_tuple,/) 检查参数cls是否为class_or_tuple或其子类
        • iter(iterable) 创建根据可迭代对象创建迭代器对象iter(callable,sentinel) 重复调用可调用对象,直到返回sentinel指定的值
        • ☆len(obj,/) 返回容器对象obj包含的元素个数,不适用于惰性求值特点的生成器对象和map、zip等迭代器对象
        • ☆list(iterable=(),/) 把对象iterable转换为列表,不加参数返回空列表
        • ☆map(func,*iterable) 返回包含若干函数值的map对象,函数func的参数来自于iterables指定的一个或多个可迭代对象中对应位置的元素,直到最短的一个可迭代对象中的元素全部用完
        • ☆max(iterable,*[,default=obj],key=func]) max(arg1,arg2,*args,*[key=func])返回可迭代对象中所有元素或多个实参的最大值,允许使用参数key指定排序规则,是用参数default指定iterable为空时返回的默认值
        • ☆min(iterable,*[,default=obj],key=func]) min(arg1,arg2,*args,*[key=func]) 返回可迭代对象中所有元素或多个实参的最小值,允许使用参数key指定排序规则,是用参数default指定iterable为空时返回的默认值
        • next(iterable[,deault]) 返回迭代器对象iterator中的下一个值,如果iterator为空则返回参数default的值,否则为空抛出异常
        • oct(number,/) 返回整数的八进制形式的字符串
        • ☆open(file,mode=,buffering=-1,encoding=None,errors=None,newline=None,closefd=None,opener=None)
        • pow(base,exp,mod=None) 相当于(base**exp)%mod
        • ord(c,/) 返回字符c的Unicode编码
        • ☆print(value,...,sep='',end='\n',file=sys.stdout,flush=False) 基本输出函数,可以输出一个或多个表达式的值,参数sep表示相邻数据间的分隔符(默认空格),参数end用来指定输出完所有值后的结束符(默认换行)[可以输出到指定文件file]
        • property(fget=None,fset=None,fdel=None,doc=None) 用来创建属性,也可以作为装饰器使用
        • quit(code=None) 结束程序,退出当前的Python程序
        • ☆range(stop) range(start,stop[,step]) 返回range对象,其中包含左闭右开区间[start,stop)内以step为步长的整数,其中start默认为0,step默认为1
        • reduce(function,sequencep[,initial]) 将双参数function以迭代的方式从左到右依次应用至可迭代对象sequence中每个元素,并把中间计算结果作为下一次计算时函数function的第一个参数,最终返回单个值作为结果
        • repr(obj,/) 把对象转换为适合Python解释器内部识别的字符串形式,对于不包含反斜线的字符串和其他类型的对象,repr(obj)和str(obj)功能一样,对于包含的把单个反斜线变成两个
        • ☆reversed(sequence,/) 返回序列sequence中所有元素逆序后的迭代器对象
        • round(number,ndigits=None) 对整数和实数number进行四舍五入,最多保留ndigits位小数,参数ndigits可以为负数
        • ☆set(iterable) 把可迭代对象iterable转换为集合,不加参数返回空集合
        • setattr(obj,name,value,/) 设置对象属性,相当于obj.name=value
        • ☆sorted(iterable,/,*,key=None,reverse=False) 返回参数iterable中所有元素排序后组成的列表,参数key用来指定排序规则或依据,参数reverse用来指定升序或降序,默认FALSE升序
        • slice(stop) slice(start,stop[,step]) 创建切片对象,可以用作下标。
        • staticmethod(function) 用来把实例方法转换为类的静态方法
        • ☆str(obj='') str(bytes_or_buffer[,encoding[,errors]]) 创建字符串对象或者把字节串使用参数encoding指定的编码格式转换为字符串,相当于byts_or_buffer.decode(encoding)
        • ☆sum(iterable,/,start=0) 返回参数start与可迭代对象iterable中所有元素相加之和,默认和为start
        • super() 返回当前类的基类
        • ☆tuple(iterable=(),/) 把可迭代对象iterable转换为元组,不加参数返回空元组
        • ☆type() 查看对象类型或创建新类型
        • vars([object]) 不带参数时等价于locals(),带参数时等价于object.__dict__
        • ☆zip(*iterable) 组合一个或多个可迭代对象中对应位置上的元素,返回zip对象,每个元素为元组类型,元素个数取决于可迭代对象中个数最小的一个

  • Python可迭代对象

    • 列表
      • 基本介绍
        • 列表是包含若干元素的有序连续内存空间
        • 列表对象自动进行内存的扩展或收缩,从而保证相邻元素之间没有缝隙
        • Python采用基于值的自动内存管理,变量并不直接存储值,而是存储值的引用或内存地址Python列表中的元素也是值的引用
        • 负担较重,尽量避免过多使用列表
      • 创建与删除
        • 创建
          • “=”直接将一个列表赋值给变量
          • list()函数转换
            • 字典的转换是将键作为元素组成列表
        • 删除
          • del
      • 元素访问
        • 使用整数作为下标负数坐标从后向前
      • 常用方法
        • append(object,/)
          • 将任意类型的对象object添加至当前列表的尾部,无返回值
        • clear()
          • 删除当前列表中的所有元素,无返回值
        • copy()
          • 返回当前列表的浅复制,把当前列表中所有元素的引用复制到新列表
            • 所谓浅复制,是指生成一个新的列表,把列表中所有元素的引用都复制到新的列表中修改任何一个都会可能影响另外一个
              • 修改不可变数据类型不产生影响
              • 修改可变数据类型产生影响
          • deepcopy()
            • 所谓深复制,是指对原列表中的元素进行递归,把所有的值都复制到新列表中,对嵌套的子列表不再是直接复制引用
          • 把一个列表变量赋值给另外一个变量,两个变量引用同一个列表对象,对其中一个做的任何修改都会立刻在另外一个变量中体现
        • count(value,/)
          • 返回值为value的元素在当前列表中的出现次数,如果没有返回0
        • extend(iterable,/)
          • 将可迭代对象iterable中所有元素添加到当前列表的尾部,无返回值
        • insert(index,object,/)
          • 在当前列表的index位置前面插入对象object,无返回值
        • index(value,start=0,stop=超大数,/)
          • 返回当前列表中[start,stop[范围内的第一个值为value的元素的索引,不存在抛出异常
        • pop(index=-1,/)
          • 删除并返回当前列表中坐标为index的元素,默认删除最后一个元素
        • remove(value,/)
          • 在当前列表中删除第一个值为value的元素,无返回值,不存在抛异常
        • reverse()
          • 对当前列表中的所有元素进行原地翻转,首尾交换,无返回值
        • sort(*,key=None,reverse=False)
          • 对当前列表中的元素进行原地排序,稳定排序,key指定排序规则
      • 支持运算符
        • “+”与“+=”
          • + 也可以实现列表增加元素的目的,不属于原地操作,返回新列表,效率低
          • += 原地操作,与extend()等价
        • “*”与“*=”
          • * 序列重复,返回新列表
        • in
          • 用于测试列表中是否包含某个元素
      • 内置函数
        • max()与min()
        • sum()
        • len()
        • map()
        • zip()
        • enumerate()
        • filter()
        • all()与any()
      • 列表推导式
        • 语法形式
          • [expression for expr1 in sequence1 if cond1                   for expr2 in sequence1 if cond2                   for expr3 in sequence1 if cond3                   ....]
        • 应用实例
          • 实现嵌套列表的平铺
            • chain(*list)
          • 过滤不符合条件的元素
          • 同时便利多个列表或可迭代对象
          • 使用列表推导式实现矩阵逆置
      • 切片
        • 基本语法
          • [start=0:stop=len(list):step=1]
        • 应用实例
          • 使用切片获取列表的部分元素
            • 切片操作不会因为下标越界而抛出异常,自动截断列表
          • 使用切片为列表添加元素
            • 列表尾部添加 list[len(list):]=[...]列表头部添加 list[:0]=[...]中间位置插入 list[:]=[..]
          • 使用切片替换和修改列表中的元素
          • 使用切片删除列表中的元素
            • del
          • 切片得到是列表的浅复制
    • 元组
      • 创建与元素访问
        • 元组中只有一个元素时必须在最后添加一个逗号。定义后元组中的元素的数量和引用不允许改变
        • “=”将一个元组赋值给变量
        • tuple()函数转换
        • 下标访问元素
      • 生成器表达式
        • (expression for expr1 in sequence1 if cond1                   ...)
        • 生成器表达式的结果是一个生成器对象生成器对象属于迭代器对象,具有惰性求值的特点,只在需要时生成新元素
        • 没有任何方法可以返回已访问过的元素,也不支持使用下标或切片访问其中的元素
        • yield语句的函数也可以用来创建生成器对象
        • 迭代器与生成器
          • 迭代器
            • 迭代器就是用于迭代操作(for 循环)的对象,它像列表一样可以迭代获取其中的每一个元素,任何实现了 __next__ 方法(python2 是 next)的对象都可以称为迭代器。
              • 构建迭代器的时候,不像列表把所有元素一次性加载到内存,而是以一种延迟计算(lazy evaluation)方式返回元素,这正是它的优点。因为它并没有把所有元素装载到内存中,而是等到调用 next 方法时候才返回该元素(call by need 的方式),本质上 for 循环就是不断地调用迭代器的next方法。
          • 生成器
            • Python 中有一种函数,用关键字 yield 来返回值,这种函数叫生成器函数,函数被调用时会返回一个生成器对象,生成器本质上还是一个迭代器,也是用在迭代操作中,因此它有和迭代器一样的特性,唯一的区别在于实现方式上不一样,后者更加简洁
              • yield 对应的值在函数被调用时不会立刻返回,而是调用next方法时(本质上 for 循环也是调用 next 方法)才返回
      • 元组与列表的异同
          • 列表和元组都属于有序序列,都支持使用双向索引访问其中的元素
          • count(),index(),map(),filter(),+,-,*,in,+=
        • 不同
          • 元组属于不可变序列或可哈希序列,不可以修改元素的引用,也无法为元组增加或删除元素
          • Python内部对元组进行了大量优化,占用内存比列表略少,访问速度略快
          • 列表不能当做字典键使用,也不能作为集合中的元素
    • 字典
      • 基本介绍
        • 字典是包含若干“键:值”元素的无序可变容器对象
        • 字典中元素的“键”可以是Python中任意不可变数据(整数,实数,复数,字符串,元组等类型的可哈希数据),但不能使用列表、集合、字典或其他可变类型作为字典的键
        • 字典中的“键”不能重复,“值”可以重复
        • 字典在内部维护的哈希表使得检索速度非常快
      • 创建与删除
        • “=”将一个字典字面值赋值给一个变量
        • 内置dict类
        • del
      • 常用方法
        • clear()
          • 删除当前字典对象中的所有元素,无返回值
        • copy()
          • 返回当前字典的浅复制
        • fromkeys(iterable,value=None,/)
          • 以参数iterable中的元素为"键",以参数value为"值"创建并返回字典对象,字典中所有的值的引用都一样,要么是None,要么是指定的value值
        • get(key,default=None,/)
          • 返回当前字典对象中以参数key为"键"对应的元素的"值",如果当前对象中没有以key为"键"的值,返回参数default
        • items()
          • 返回包含当前对象中所有元素的dict_items对象,每个元素形式为(key,value),dict_items对象可以与集合进行交并差等运算
        • keys()
          • 返回当前字典对象中所有的"键",结果为dict_keys的可迭代对象,可以和集合进行交并差等运算
        • values()
          • 返回包含当前字典对象中所有的"值"的dict_values对象
        • pop(k[,d])
          • 删除以k为"键"的元素,返回对应元素的"值",如果字典中没有以k为键的元素,返回参数d,并且无参数d,抛出异常
        • popitem()
          • 按后进先出顺序删除并返回一个元组,如果当前字典为空则抛出异常
        • setdefault(key,default,/)
          • 如果参数是当前字典的"键",返回对应的值,如果key不是当前字典的"键",插入并返回default的值
      • 元素访问
        • 根据"键"作为下标可以访问对应的"值"
        • 对字典对象直接进行迭代或者遍历时默认是遍历字典的"键"
      • 元素添加、修改与删除
        • 以指定"键"为下标位字典元素赋值时,若"键"存在,修改值若"键"不存在,添加新元素
        • update({key:value}...) 更新+添加
        • del pop() popitem() clear()
      • 标准库collections中与字典有关的类
        • OrderedDict
        • defaultdict
        • Counter
    • 集合
      • 基本介绍
        • 无序可变容器对象
        • 元素之间不重复
        • 集合中只能包含数字、字符串、元组等不可变类型的数据,不能以任何方式包含列表、字典、集合等可变类型的数据
      • 创建与删除
        • “=”将集合字面值赋值给变量
        • set()函数转换
        • del
      • 集合方法与运算
        • add()
          • 往当前集合中增加一个可哈希元素,如果集合中已经存在该元素,直接忽略操作。不可哈希抛出异常
        • clear()
          • 删除当前集合中的所有元素,无返回值
        • difference()
          • 接收一个或多个集合(或其他可迭代对象),返回当前集合对象与所有参数对象的差集,相当于"-"
        • difference_update()
          • 接收一个或多个集合(或其他可迭代对象),从当前集合中删除所有参数对象中的元素,相当于"-="
        • discard()
          • 接收一个可哈希对象作为参数,从当前集合中删除该元素,如果不存在忽略操作。该方法直接修改集合,无返回值
        • intersection()
          • 接收一个或多个集合对象(或其他可迭代对象),返回当前集合与所有参数对象的交集,不对当前集合做任何修改,类似于"&"
        • intersection_update()
          • 接收一个或多个集合对象(或其他可迭代对象),使用当前集合与所有参数对象的交集更新当前集合对象,类似于"&="
        • pop()
          • 不接收参数,删除任意一个元素,集合为空抛出异常
        • remove()
          • 从当前集合中删除参数指定的元素,如果参数指定的元素不在集合中抛出异常
        • union()
          • 接收一个或多个集合对象(或其他可迭代对象),返回当前集合与所有参数对象的并集,不对当前集合做任何修改,类似于"|"
        • update()
          • 接收一个或多个集合对象(或其他可迭代对象),把参数对象中所有元素添加到当前集合对象中,无返回值,类似于"|="
        • 关系运算符作用于集合时表示集合之间的包含关系
        • 关键字in作用于字典和集合时比作用与列表要快的多
        • 集合中的元素不允许重复,Python集合的内部实现为此做了大量相应的优化,添加元素时如果已经存在重复元素则自动省略
    • 序列解包
    • Python容器对象分类
      • 有序容器对象
        • 列表
        • 元组(不可变容器对象)
        • 字符串(不可变容器对象)
      • 无序容器对象(可变容器对象)
        • 字典
        • 集合
  • 程序控制结构

    • 条件表达式
      • 条件表达式的值只要不是FALSE,0,空值None,空列表,空元组,空集合,空字典,空字符串,空range对象或其他能够使得bool()返回FALSE对象,都与TRUE等价
      • 所有Python合法的表达式可以作为条件表达式
      • 条件表达式中不允许使用单个等号"="
      • 逻辑表达式具有短路求值或惰性求值的特点
    • 选择结构
      • 单分支选择结构
        • if 表达式:   语句块
      • 双分支选择结构
        • if 表达式:    语句块1else:    语句块2
        • 三元运算符
          • value1 if condition else value2
      • 多分支选择结构
        • if 表达式:   语句块1elif 表达式:   语句块2else:   语句块3
      • 选择结构嵌套
        • 使用嵌套选择结构时,一定要严格控制好不同级别代码的缩进量
    • 循环结构
      • for与while
      • break与continue
      • 代码优化
        • 首先要把代码写对,保证完全符合功能要求,然后进行 必要的优化来提高性能
    • 对于带有else子句的循环结构,如果循环自然结束时执行else中的语句,如果循环是因为执行了break语句而导致提前结束则不会执行else语句
  • 字符串

    • 基本介绍
      • 字符串属于不可变序列
      • 支持序列的通用操作
        • 双向索引
        • 比较大小
        • 计算长度
        • 元素访问
        • 切片
        • 成员测试
    • 编码格式
      • ASCII
        • 仅对10个数字,26个大写英文字母,26个小写英文字母及一些其他符号进行了编码,采用1字节对字符进行编码
      • utf-8
        • UTF-8对全世界所有国家需要用到的字符进行了编码,以1字节表示英语字符(兼容ASCII),以3字节表示常见汉字
      • GB2312,GBK,CP936都是使用2字节表示函数
    • 转移字符与原始字符串
      • 转义字符
        • 在字符串中某些特定的符号前加一个反斜线后,该字符将被解释为另外一种含义,不再表示本来的字符
        • 常用转移字符
          • \b 退格,把光标前移到前一列位置
          • \f 换页符
          • \n 换行符
          • \r 回车符
          • \t 制表符
          • \v 垂直制表符
          • \Uhhhhhhhh 8位十六进制数表示的Unicode字符
          • \\ 一个反斜线
          • \' 单引号'
          • \" 双引号"
          • \ooo 3位八进制数对应的字符
          • \xhh 2位十六进制对应的字符
          • \uhhhh 4位十六进制数表示的Unicode字符
      • 原始字符
        • 为了避免对字符串中的转义字符进行转义,可以使用原始字符串,在字符串前面加上字母r或R表示原始字符串
    • 字符串格式化
      • 使用%运算符进行格式化
        • 【'%】(格式标志,表示格式开始)【-】(指定左对齐输出)【0】(对正数加正号)[0]指定空位补0【m】]指定最小宽度【.n】指定精度格式字符【'%】【格式运算符】【x】待转换的表达式
        • 格式字符
          • %s 字符串(采用str()的显示)
          • %r 字符串(采用repr()的显示)
          • %c 单个字符
          • %% 字符%
          • %d 十进制整数
          • %i 十进制整数
          • %o 八进制整数
          • %x 十六进制整数
          • %e 指数(基底写e)
          • %E 指数(基底写E)
          • %f,%F 浮点数
          • %g 指数(e)或浮点数(根据长度决定显示方式)
          • %G 指数(E)或浮点数(根据长度决定显示方式)
      • 使用format()方法进行字符串格式化
        • 在字符串格式化方法fromat()中可以支持使用的格式主要有b(二进制格式),c(把整数转换成Unicode字符),d(十进制格式),o(八进制格式),x(小写十六进制格式),X(大写十六进制格式),e/E(科学计数法格式),f/F(固定长度的浮点数格式),%(使用固定长度浮点数显示百分数),单个下划线提高数字的可读性
      • 格式化的字符串常量
        • 简称f-字符串
    • 字符串常用操作
      • 字符串对象提供的涉及字符串"修改"的方法都是返回修改后的新字符串,并不对原字符串做任何修改
      • 常用方法与功能
        • capitalize() 返回新字符串,第一个英文字母大写,其余小写
        • center(width=新字符串的长度,fillchar='填充字符') ljust() rjust()  返回指定长度的新字符串,当前字符串在新字符串中居中/居左/居右
        • count(sub[,start=0[,end=字符串长度]]) 返回字符串sub在下标范围[start,end)内不重复出现的次数
        • encode(encoding='utf-8',errors='strict') 返回当前字符串使用参数encoding指定的编码格式编码后的字节串
        • endswith(suffix[,start[,end]]),startswith(prefix[,start[,end]]) 如果当前字符串下标范围[start,end)的子串以以某个字符串suffix/prefix或元组suffix/prefix指定的几个字符串之一结束/开始则返回TRUE,否则返回false
        • expandstabs(tabsize=8) 返回新字符串,所有tab键都替换为合适数量的空格
        • find(sub[,start[,end]]) rfind(sub[,start[,end]]) 返回字符串sub在指定的范围内出现的最小/最大下标,不存在返回-1
        • format(*args,**kwargs) 返回对当前字符串进行格式化后的行字符串,args位置参数,kwargs关键参数
        • index(sub[,start[,end]]) rindex(sub[,start[,end]]) 返回字符串sub在指定的范围内出现的最小/最大下标,不存在抛出异常
        • join(iterable) 使用当前字符串作为连接符把参数iterable中的所有字符串连接成一个长字符串并返回连接后之后的长字符串,要求iterable中的所有元素全部是字符串
        • lower() upper() 返回当前字符串中所有字符串都变为小写/大写之后的新字符串,非字母字符保持不变
        • lstrip() rstrip() strip(chars=None) 返回当前字符串删除左侧/右侧/两侧的空白字符或参数chars中所有字符之后的新字符串
        • partition(sep,/) rpartition(sep,/) 使用参数sep指定字符串的第一次/最后一次出现作为分隔符,把当前字符串分割成3个子串,返回包含3个子串的元组,如果当前子串不存在,返回当前字符串和两个空串组成的元组
        • removeprefix(prefix,/)  removesuffix(suffix,/) 返回删除前缀/后缀的新字符串
        • replace(old,new,count=-1,/) 返回当前字符串中所有子串old都被替换成子串new之后的新字符串,参数count指定最大的替换次数,默认值=-1替换全部
        • rsplit(sep=None,max_split=-1) split(sep=None,max_split=-1) 使用参数sep指定的字符串对当前字符串从后向前/从前向后进行切分,返回包含切分后所有子串的列表,sep=None表示使用所有空白字符作为分割符并丢弃切分结果中的所有空字符串,max_split表示最大切分次数,默认-1表示无切分限制
        • splitlines(keepsend=False) 使用换行符切分字符串,返回列表
        • title() 返回新字符串,每个单词的首字母大写,其余字母小写
        • maketrans(...) 根据参数给定的字典或者两个等长字符串对应位置的字符,构造并返回字典映射表(形式上是字典,"键"和"值"都是字符Unicode编码),如果指定了第三个参数(必须是字符串)则该参数中所有字符都被映射为空值None。该方法是字符串类str的静态方法,可以通过任意字符串进行调用,也可以直接通过字符串类str进行调用
        • translate(table,/) 根据参数table指定的映射表对当前字符串中的字符进行替换并返回替换后的新字符串,不影响原字符串,参数一般是maketrans()创建的映射表,其中映射为空值None的字符将会被删除而不出现在新的字符串中
        • swapcase() 交换英文字母大小写,返回新字符串
        • isalnum(),isalpha(),isdigit(),isdecimal(),isnumeric(),isspace(),isupper(),islower()
      • 适用于字符串对象的内置函数
        • eval()
      • 字符串切片操作
    • 字符串常量
      • 标准库string
    • 中英文分词
      • 扩展库jieba和snownlp
    • 汉字到拼音的转换
      • 扩展库pypinyin
  • 函数

    • 函数
      • 函数定义与使用
        • def 函数名([参数列表]):      """注释"""      函数体
        • 函数形参不需要声明其类型(也可以声明,但实际不起任何作用),也不需要指定函数的返回值类型即使函数不需要接收任何参数,也必须保留一对空的括号括号后面的冒号必不可少函数相当于def关键字必须保持一定的空格缩进
        • 函数的返回值类型与return语句返回表达式的类型一致如果函数没有return语句,有return语句但是没有执行到或者执行了不返回任何值的return语句,解释器都会认为该函数以return None结束,即返回空值
        • 函数的嵌套定义,可调用对象与修饰器
          • 函数的嵌套定义
            • 在函数内部在定义另外一个函数
          • 可调用对象
            • 函数属于Python可调用对象之一,由于构造方法的存在,类也是可调用对象
          • ?修饰器
            • 修饰器是本质上也是一个函数,只不过这个函数接收其他函数作为参数并对其进行一定修饰后返回新函数
        • 函数递归调用
          • 函数的递归调用是函数调用自己
      • 函数参数
        • 基本介绍
          • 调用函数时向其传递实参,将实参的引用传递给形参,定义函数时不需要声明类型
          • 在函数内部直接修改形参的值,实际是修改引用,不会影响实参
          • 如果传递给函数的是列表,字典,集合或者其他自定的可变对象,并且在函数内部使用下标或对象自身支持的方法增加、删除或修改元素值时,修改后的结果是可以反映到函数上之外的,即实参得到了修改
        • 位置参数
          • 实参按位置逐个传递给形参
        • 默认值参数
          • def 函数名(...,参数名=默认值):      """注释"""      函数体
          • python支持默认值参数,在定义函数时可以为参数设置默认值
          • 在调用函数时是否为默认值参数传递实参是可选的
          • 任何一个默认值参数右边都不能在出现没有默认值的普通位置参数
          • "函数名.__default__"随时查看函数所有默认值参数的当前值
          • 默认值参数的引用只在函数定义时进行一次解释和初始化
            • 要避免使用列表,字典,元组,集合或其他可变对象作为参数的默认值
              • 可记忆化,连续多次调用该函数而不给该参数传值时,再次调用将保留上一次调用的结果
          • 函数的默认值参数是在函数定义时确定的
            • 定义函数时某个参数的默认值是一个变量,那么函数定义时只依赖于函数定义时该变量的值
        • 关键参数
          • 通过关键参数可以按名字进行传递参数,明确指定哪个实参传递给哪个形参,实参顺序可以和形参顺序不一致
        • 可变长度参数
          • *parameter
            • 接收任意多个位置实参并将其放在一个元组中
          • **parameter
            • 接收类似于关键参数一样显式赋值形式的多个实参并将其放入字典中
        • 实参序列解包
          • 调用含有多个位置参数的函数时,可以使用Python列表,元组,集合,字典及其他可迭代对象作为实参,并在实参名称前加一个星号"*",Python解释器将自动进行解包,把可迭代对象中的值作为位置参数分别传递给多个单变量形参
          • 如果实参是字典,可以使用两个星号"**"对其进行解包,会把字典元素转换成关键参数的形式进行参数传递
          • 多种形式接收参数,①位置参数,②默认值参数,③一个星号的可变长度参数,④两个星号的可变长度参数
      • 变量作用域
        • 变量起作用的代码范围称为变量的作用域,不同作用域内同名变量之间互不影响
        • 在函数内定义的局部变量只在该函数内可见
        • 函数内部修改一个定义在函数外的变量值global用法
          • 一个变量已在函数外定义,如果在函数内需要修改这个变量的值,并将修改的结果反映到函数之外,可以在函数内用关键字global明确声明要使用已定义的同名全局变量
          • 在函数内直接使用global关键字将一个变量声明为全局变量,如果在函数外没有定义该全局变量,在调用这个函数之后,会创建新的全局变量,但不建议这么样做
        • 如果在某个作用域内有为变量赋值的操作,那么该变量将被认为是该作用域内的局部变量
      • lambda表达式
        • lambda表达式常用来声明匿名函数,即没有函数名字的临时使用的小函数,用在临时需要一个类似于函数的功能但不想定义函数的场合
      • 生成器函数设计与使用
        • 包含yield语句的函数可以用来创建生成器对象,这样的函数称为生成器函数
          • return
            • 一旦执行立刻结束函数的运行
          • yield
            • 每次执行到yield语句并返回一个值之后会暂停或挂起后面代码的执行,下面通过生成器对象__next__()方法,内置函数next(),for()循环遍历生成器对象元素或其他方法显式"索值"数据时恢复执行
        • 生成器对象属于迭代器具有惰性求值的方法,占用空间小,适合大数据处理
  • 面向对象程序设计

    • 基本介绍
      • 面向对象程序设计的一个关键观念是将数据以及对数据的操作封装在一起,组成一个相互依存、不可分割的整体(对象),不同对象之间通过消息机制来通信或者同步。
      • 面向对象程序设计的关键就是如何合理地设计和定义这些类并且组织多个类之间的关系
      • Python是面向对象的解释型高级动态编程语言,完全支持面向对象的基本功能
      • 创建类时用变量形式表示对象特征的成员称为数据成员,用函数形式表示对象行为的成员称为成员方法,数据成员和成员方法统称为类的成员
      • Python中对象的概念很广泛,Python中的一切内容都可以称为对象,函数也是对象,类也是对象,python中一切皆对象,linux中一切皆文件
    • 类的定义与使用
      • class 类名:  #类名一般使用大驼峰命名    类属性    类方法
    • 数据成员与成员方法
      • 私有成员与公有成员
        • Python中的类成员分为私有成员和公有成员两种。默认情况下,Python中的所有成员都是公有成员,但是私有成员以双下划线开头的名字来标示,私有成员不允许直接访问,只能通过内部方法去访问,而且私有成员也不允许被继承。私有成员是指以双下划线"__"开头的变量或方法,只能在类内部访问,而无法在类外部进行访问。公有成员是指没有加上双下划线的变量或方法,可以在类内部和类外部进行访问。总结起来,Python中的私有成员只能在类内部访问,而公有成员可以在类的内部和外部进行访问。
        • 私有成员在类的外部不能直接访问,一般是在类的内部进行访问和操作,或者在类的外部通过对象的公有方法来访问。公有成员(或公开成员)是可以公开使用的,既可以在类的内部进行访问,也可以在外部程序中使用
          • 私有成员的破解:对象名._类名__xxx(不建议)
        • 在Python中,以下划线开头或结果的成员名有特殊的含义
          • _xxx:单下划线开头,受保护成员,类对象,子类对象访问,无法import *导入
          • __xxx__:前后各两个下划线,特殊方法
          • __xxx:以两个或多个下划线开头但不能以两个或多个下划线结束,私有成员,基类对象自己访问
      • 数据成员
        • Python中的数据成员包括类变量和实例变量。类变量是定义在类中但在任何实例方法之外的变量,它属于类本身而不是类的实例。可以通过类名直接访问类变量。实例变量是定义在类的实例方法中的变量,属于每个对象实例。实例变量需要通过对象实例来访问。此外,还有局部变量,它们只存在于方法内部,并且只在方法执行期间有效,无法从外部访问。
        • 数据成员可以分为属于对象的数据成员和属于类的数据成员。属于对象的数据成员一般定义在__init()__方法中,在定义和实例方法中访问数据成员时以self作为前缀,同一个类的不同对象(实例)的数据成员之间互不影响属于类的数据成员是该类所有对象共享的,不属于任何一个对象,在定义类时这类数据成员不在任何一个成员方法的定义中
      • 成员方法、类方法、静态方法、抽象方法
        • 在面向对象程序设计中,函数和方法这两个概念是有本质区别的。方法特指与类或对象绑定的函数,通过对象调用方法时,对象本身将作为第一个参数自动传递过去,普通函数不具备这个特点
        • 所有实例方法(包括公有方法,私有方法,抽象方法和某些特殊方法)都必须至少有一个名为self的参数,并且必须是第一个形参(如果有多个形参),self参数代表当前对象
        • 静态方法和类方法可以通过类名和对象名调用,但不能直接访问属于对象的成员,只能访问属于类的成员
          • 静态方法:使用@staticmethod修饰的方法参数随意,没有self和cls参数方法体中不能使用类或实例的任何属性和方法实例对象和类对象都可以调用静态方法是类中的函数,不需要使用实例。也就是说不需要进行实例化就可以调用静态方法一般定义后就不需要再进行修改,用来写一些固定的操作
          • 类方法:类中通过@classmethod修饰的方法第一个参数必须是当前类的对象,该参数名一般约定为cls,通过它来传递类的属性和方法。调用:实例对象和类对象都可以调用类方法是将类本身作为对象进行操作的方法通过使用类方法可以在不创建对象的时候直接进行操作
      • 属性
        • 属性是一种特殊形式的成员方法,结合了数据成员和成员方法的优点,既可以像成员方法那样对值进行必要的检查,又可以像数据成员一样灵活访问
        • python中使用@property将一个方法转换为属性,从而实现用于计算的属性,将方法转换为属性后,可以直接通过方法名来访问,而不需要加括号。@property可以将属性设置为只读属性
      • 类与对象的动态性、混入机制
        • 在Python中可以动态的为自定义类和对象增加数据成员和成员方法,Python动态类型的一种重要体现
          • import typesclass Demo:     passdemo=Demo()def test():     print("hello")demo.test=types.MethodType(test,demo)demo.test()
        • python类型的动态性使得可以动态为自定义类及其对象增加行的属性和行为,俗称混入机制
    • 继承、多态
      • 继承
        • 在继承关系中,已有的、设计好的类称为父类或基类,新设计的类称为子类或派生类在派生类调用父类的方法——super()/基类名.方法名()
      • 多态
        • 多态是指基类的同一个方法在不同派生类中具有不同的表现和行为
    • 特殊方法与运算符重载
      • 比较常见的是构造方法和析构方法
        • 构造方法__init()__,用来为数据成员设计初始值或进行其他必要的初始化工作,在实例化对象时被自动调用和执行
        • 析构方法__del()__,一般用来释放对象占用的资源,在删除对象和回收对象占用的内存空间时被自动调用
      • Python类的特殊成员...
  • 正则表达式

    • 语法
      • 基本语法
        • 常用正则表达式元字符
          • "." 匹配除换行符之外的任意单个字符,单行模式下也可以匹配换行符 
          • "*" 匹配位于"*"之前的字符或子模式的0次或多次重复
          • "+" 匹配位于"+"之前的字符或子模式1次或多次重复
          • "-" 在[]之内用来表示范围,否则表示普通减号字符
          • "|" 匹配位于"|"之前或之后的模式
          • "^" 匹配以"^"后面的字符或模式开头的字符串,在[]中第一个字符表示不匹配后面的字符
          • "$" 匹配以"$"前面的字符或模式结尾的字符串
          • "?" 表示问号之前的字符或子模式是可选的,紧随任何其他表示次数的限定符之后,表示非贪心模式
          • "\" 非原始字符串尝试对"\"后面的数字或字母进行转义
          • "\num" 此处的num是一个正整数,表示前面某个子模式的编号,子模式编号从1开始,整个正则表达式的是模式0。
          • "\f" 匹配一个换页符
          • "\n" 匹配一个换行符
          • "\r" 匹配一个回车符
          • "\b" 匹配单词头或单词尾
          • "\B" 与"\b"含义相反
          • "\d" 匹配任意数字,相当于[0-9]
          • "\D" 与"\d"含义相反,相当于[^0-9]
          • "\s" 匹配单个任何空白字符,等效[\f\n\r\t\v]
          • "\S" 与"\s"含义相反,匹配单个非空白字符
          • "\w" 匹配任何汉字,字母,数字以及下划线
          • "\W" 与"\w"含义相反
          • "()" 定义子模式,将位于"()"内的内容作为一个整体来对待
          • "{m,n}" 按"{m,n}"中指定的次数进行匹配
          • "[]" 匹配位于"[]"里的任意一个字符
          • "[^xyz]" "^"放在"[]"里表示反向字符集,匹配除了x,y,z之外的任何字符
          • "[a-z]" 字符范围,匹配指定范围内的任何字符
          • "[^a-z]" 反向范围字符,匹配除小写英文字母外的任何字符
      • 扩展语法
        • 正则表达式使用圆括号"()"表示一个子模式,圆括号内的内容作为一个整体对待
        • 常用的子模式扩展语法
          • (?P) 为子模式命名
          • (?iLmsux) 设置匹配表示
          • (?:···) 匹配但不捕获该匹配的子表达式
          • (?P=groupname) 表示在此之前的命名为groupname的子模式的内容
          • (?#···)表示注释
          • (?<=···) 用于正则表达式之前,如果<=之后的内容在字符串中出现则匹配,但不返回<=的内容
          • (?=···) 用于正则表达式之后,如果=后的内容在字符串中出现则匹配,但不返回=之后的内容
          • (?用于正则表达式之前,如果
          • (?!···) 用于正则表达式之后,如果!后面的内容在字符串中不出现则匹配,但不返回!之后的内容
    • re模块字符串处理
      • compile(pattern[,flag]) 创建正则表达式对象
      • escape(pattern) 将字符串中所有特殊字符进行转义
      • findall(pattern,string[,flags]) 列出字符串中模式的所有匹配项,如果正则表达式中有子模式则只返回子模式的内容
      • finditer(pattern,string,flags=0) 返回包含所有匹配项的迭代器对象,其中每个匹配项都是Match对象
      • fullmatch(pattern,string,flags=0) 尝试把模式作用与整个字符串,返回Match对象或None
      • match(pattern,string[,flags]) 从字符串的开始处匹配模式,返回Match对象或None
      • purge() 清空正则表达式缓存
      • search(pattern,string[,flags]) 在整个字符串中寻找模式匹配项,返回Match对象或None
      • split(pattern,string[,maxsplit=0]) 根据模式匹配项分割字符串
      • sub(pat,repl,string[,count=0]) 将字符串中所有pat的匹配项用repl替换,返回新字符串,repl可以是字符串的可调用对象,该可调用对象作用于每个匹配的Match对象
      • sub(pat,repl,string[,count=0]) 将字符串中所有pat的匹配项用repl替换,返回新字符串和替换次数的元组,repl可以是字符串的可调用对象,该可调用对象作用于每个匹配的Match对象
    • 正则表达式对象处理字符串
      • 首先使用re模块的compile()函数将正则表达式编译成正则表达式对象,然后使用正则表达式对象提供的方法进行字符串处理
      • 常用方法
        • match(string[,pos[,endpos]]) 方法在字符串开头或指定位置进行搜索,模式必须出现在字符串开头或指定位置
        • search(string[pos[,endpos]]) 方法在整个字符串或者指定范围内进行搜索
        • findall(string[,pos[,endpos]]) 方法在字符串中查找所有符合正则表达式的字符串并以列表的形式返回
        • split(string[,maxsplit=0]) 实现字符串分隔
        • sub(repl,string[,count=0]) 字符串替换subn(repl,string[,count=0]) repl可以为字符串或返回字符串的可调用对象
    • Match对象
      • group() 返回匹配的一个或多个子模式内容
      • groups() 返回一个包含匹配的所有子模式内容的元组
      • groupdict() 返回包含匹配的所有命名子模式内容的字典
      • start() 返回指定子模式内容的起始位置
      • end() 返回指定子模式内容的结束位置的下一个位置
      • span() 返回一个包含指定子模式内容起始位置和结束位置下一个位置的元组
  • 文件与文件夹操作

    • os模块
      • chdir(path) 把path设为当前工作目录 (文件夹)
      • chmod(path,mode,*,dir_fd=None,follow_symlinks=True) 改变文件的访问权限
      • getcwd() 返回当前工作目录
      • listdir(path) 返回path目录下的文件和目录列表
      • mkdir(path[,mode=511]) 创建目录,要求上级目录必须存在
      • mkdirs(path1/path2...,mode=511) 创建多级目录,会自动创建缺失的目录
      • rmdir(path) 删除目录,目录下不允许有文件或子文件夹
      • remove(path) 删除指定的文件,要求用户拥有删除文件的权限,并且文件没有只读或其他特殊属性
      • removedirs(path1/path2/...) 删除多级目录,目录中不能有文件
      • rename(src,dst) 重命名文件或目录,可以实现文件的移动,若目标文件已经存在则抛出异常,不能跨越磁盘或分区
      • replace(old,new) 重命名文件或目录,若目标文件已经存在则直接覆盖,不能跨越磁盘或分区
      • scandir(path='.') 返回包含指定文件夹中的所有DirEntry对象的可迭代对象,遍历此文件夹时比listdir()更加高效
      • startfile(filepath[,operation]) 使用关联的应用程序打开指定文件或启动指定的应用程序
      • stat(path) 返回文件的所有属性
      • system() 启动外部程序
    • os.path模块
      • abspath(path) 返回给定路径的绝对路径
      • basename(path) 返回指定路径的最后一个组成部分
      • commonpath(paths) 返回给定的多个路径的最长公共路径,参数paths为包含多个路径的列表或元组
      • commonprefix(paths) 返回给定的多个路径的最长公共前缀
      • dirname(p) 返回给定路径的文件夹部分
      • exists(path) 判断路径是否存在
      • getatime(filename) 返回文件的最后访问时间
      • getctime(filename) 返回文件的创建时间
      • getmtime(filename) 返回文件的最后修改时间
      • getsize(filename) 返回文件的大小,单位为字节
      • isabs(path) 判断path是否为绝对路径
      • isdir(path) 判断path是否为文件夹
      • isfile(path) 判断是否为文件
      • join(path,*paths) 连接两个或多个路径
      • split(path) 以路径中的最后一个斜线作为分隔符把路径分隔成两部分,以元组形式返回
      • splitext(path) 从路径中分隔文件的扩展名,返回元组
      • sprintdrive(path) 从路径中切分驱动器的名称,返回元组
      • relpath(path) 返回相对路径
      • realpath(path) 返回真实路径
    • shutil模块
      • copy(src,dst) 复制文件,新文件与源文件同样的文件属性,如果目标文件已存在则抛出异常
      • copy2(src,dst) 复制文件,新文件具有与原文件完全一样的属性,包括创建时间,修改时间和最后访问时间等,如果目标文件已经存在则抛出异常
      • copyfile(src,dst) 复制文件,不复制文件属性,如果目标文件已经存在则直接覆盖
      • copytree(src,dst) 递归复制文件夹
      • disk_usage(path) 查看磁盘的使用情况
      • move(src,dst) 移动文件或递归移动文件夹,也可以给文件或文件夹重命名
      • rmtree(path) 递归删除文件夹
      • make_archive(base_name,format,root_dir=None,base_dir=None) 创建TAR或ZIP格式的压缩文件
      • unpack_archive(filename,extract_dir=None,format=None) 解压缩文件
  • 文件内容操作

    • 基本知识
      • 分类
        • 文本文件
          • 由包含常规字符串的若干文本行组成,通常每行以换行符"\n"结尾,常规字符串是指记事本之类的文本编辑器能正常显示,编辑并且人类能够直接阅读和理解的字符串
        • 二进制文件
          • 图形图像文件,音视频文件,可执行文件,资源文件,各种数据库文件,各类office文件等都属于二进制文件
      • 基本操作
        • 首先打开文件并创建文件对象,然后通过该文件对象对文件内容进行读取,写入,删除,修改操作,最后关闭并保存文件
      • 内置函数open()
        • open(file,mode='r',buffering=-1,encoding=None,errors=None,newline=None,closefd=True,opener=None)参数file指定要打开或创建的文件名称参数mode指定打开文件后的处理方式
        • mode类型 说明
          r 以只读⽅式打开⽂件。⽂件的指针将会放在⽂件的开头。这是默认模式。
          rb 以⼆进制格式打开⼀个⽂件⽤于只读。⽂件指针将会放在⽂件的开头。这是默认模式。
          r+ 打开⼀个⽂件⽤于读写。⽂件指针将会放在⽂件的开头。
          rb+ 以⼆进制格式打开⼀个⽂件⽤于读写。⽂件指针将会放在⽂件的开头。
          w 打开⼀个⽂件只⽤于写⼊。如果该⽂件已存在则打开⽂件,并从开头开始编辑,即原有内容会被删除。如果该⽂件不存在,创建新⽂件。
          wb 以⼆进制格式打开⼀个⽂件只⽤于写⼊。如果该⽂件已存在则打开⽂件,并从开头开始编辑,即原有内容会被删除。如果该⽂件不存在,创建新⽂件。
          w+ 打开⼀个⽂件⽤于读写。如果该⽂件已存在则打开⽂件,并从开头开始编辑,即原有内容会被删除。如果该⽂件不存在,创建新⽂件。
          wb+ 以⼆进制格式打开⼀个⽂件⽤于读写。如果该⽂件已存在则打开⽂件,并从开头开始编辑,即原有内容会被删除。如果该⽂件不存在,创建新⽂件。
          a 打开⼀个⽂件⽤于追加。如果该⽂件已存在,⽂件指针将会放在⽂件的结尾。也就是说,新的内容将会被写⼊到已有内容之后。如果该⽂件不存在,创建新⽂件进⾏写⼊。
          ab 以⼆进制格式打开⼀个⽂件⽤于追加。如果该⽂件已存在,⽂件指针将会放在⽂件的结尾。也就是说,新的内容将会被写⼊到已有内容之后。如果该⽂件不存在,创建新⽂件进⾏写⼊。
          a+ 打开⼀个⽂件⽤于读写。如果该⽂件已存在,⽂件指针将会放在⽂件的结尾。⽂件打开时会是追加模式。如果该⽂件不存在,创建新⽂件⽤于读写。
          ab+ 以⼆进制格式打开⼀个⽂件⽤于追加。如果该⽂件已存在,⽂件指针将会放在⽂件的结尾。如果该⽂件不存在,创建新⽂件⽤于读写
      • 文件对象属性与常用方法
        • 常用属性
          • buffer 返回当前文件的缓冲区对象
          • closed 判断文件是否关闭,若文件已经关闭则返回TRUE
          • fileno 文件号
          • mode 返回文件的打开模式
          • name 返回文件的名称
        • 常用方法
          • close() 把缓冲区的内容写入文件,同时关闭文件
          • flush() 把缓冲区的内容写入文件,但不关闭文件
          • read([size]) 从文件文件中读取size个字符的内容作为结果返回,或从二进制文件中读取指定数量的字节并返回
          • readline() 从文本文件中读取一行作为结果返回
          • readlines() 把文本文件中的每行文本作为一个字符串存入列表中,返回该列表
          • seek(offset[,whence])  把文件指针移动到新的位置,以字节为单位,offset表示相对于whence的位置whence=0 开头 whence=1 当前位置 whence=2 结尾位置
          • seekable() 测试当前文件是否支持随机访问
          • tell() 返回文件指针当前位置,单位是字节
          • write(s) 把字符串s写入文本文件或把字符串写入二进制文件
          • writelines(s) 把字符串列表写入文本文件,不添加换行符
      • 上下文管理器with
        • with open(file,mode,encoding) as file:     通过文件对象file读写文件内容的语句
        • with open() as src,open() as dst:     dst.write(src.read())
    • 二进制文件操作(暂不整理)
  • 异常处理与单元测试

    • 基本介绍
      • 异常是指程序运行时引发的错误,引发错误的原因有很多,如除零,下标越界,文件不存在,网络异常等
      • 当程序执行过程中出现错误时解释器会自动引发异常,程序员也可以通过raise语句显式地引发异常
    • 异常处理结构
      • 先尝试运行代码,如果没有问题就正常执行,如果发生了错误就尝试去捕捉和处理,最后实在没办法了崩溃
      • try:    可能会引发异常的代码,先执行一下试试except Exception[ as reason]:   如果try子句中的代码抛出异常并被except捕捉,就执行这里的代码
      • try:  可能引发异常的代码except Exception[ as reason]:   用来处理异常的代码else:  如果try子句中的代码没有引发异常就继续执行这里的代码
      • try:   可能引发异常的代码except Exception[ as reason]:   处理异常的代码finally:  无论try子句中的代码是否引发异常,都会执行这里的代码
      • try:   可能引发异常的代码except Exception1:   处理异常类型1的代码except Exception2:   处理异常类型2的代码except Exception3:   处理异常类型3的代码
      • 断言assert
        • assert 表达式
        • assert expression [, arguments]assert 表达式 [, 参数]
    • 单元测试模块unittest(暂不整理)
  • 数据分析、科学计算与可视化

    • numpy数组运算与矩阵运算
    • scipy科学计算
    • pandas数据分析
    • 统计分析标准库statistics
    • matplotlib可视化
    • 创建词云图

你可能感兴趣的:(python,算法,开发语言)