导图社区 Python Tutorial
python官方文档Tutorial部分思维导图。使用格式化字符串字面值,要在字符串开头的引号/三引号前添加f 或F 。在这种字符串中,可以在{和} 字符之间输入引用的变量,或字面值的Python 表达式。
编辑于2022-06-27 17:54:04Python Tutorial
2.解释器
2.1调用解释器
python -c command [arg]
python -m module [arg]
-i 交互式运行
2.2字符编码
# -*- coding:encoding -*-
3.Python速览
数字
/除法
//整除
%求余
**乘方
交互模式下,上次输出的表达式会赋给变量_
字符串
r原始字符串
字符串可以用+合并,也可以用*重复
交互模式下。相邻两个或者多个字符串字面值会自动合并
len()返回字符串长度
列表
append()在列表结尾添加新元素
列表可以包含不同类型的元素,但在一般情况下,各个元素的类型相同。内容可以改变。
len()
4.其他流控制工具
if
if XXX: elif XXX: else:
for
元素迭代顺序与在序列中出现的顺序一致
遍历集合时修改集合的内容,很容易生成错误的结果。因此应该遍历集合副本或者创建新的集合
for i in users.copy():
range()
break
continue
else
pass
match
match status: case 400: case _:
定义函数
*name接收元组
**name接收字典
位置形参,用/分隔,/只能用位置定义
关键字形参,用*分隔,*只能使用关键字定义
Lambda表达式创建匿名函数
lambda a,b:a+b
函数注解
def f(ham:str,eggs:str = 'eggs')->str:
PEP 8
缩进,用 4 个空格,不要用制表符。4 个空格是小缩进(更深嵌套)和大缩进(更易阅读)之间的折中方案。制表符会引起混乱,最好别用。
换行,一行不超过 79 个字符。这样换行的小屏阅读体验更好,还便于在大屏显示器上并排阅读多个代码文件。
用空行分隔函数和类,及函数内较大的代码块。
最好把注释放到单独一行。
使用文档字符串。
运算符前后、逗号后要用空格,但不要直接在括号内使用: a = f(1, 2) + g(3, 4)。
类 和 函 数 的 命 名 要 一 致; 按 惯 例, 命 名 类 用 UpperCamelCase, 命 名 函 数 与 方 法 用lowercase_with_underscores。命名方法中第一个参数总是用 self (类和方法详见初探类)。
编写用于国际多语环境的代码时,不要用生僻的编码。 Python 默认的 UTF-8 或纯 ASCII 可以胜任各种情况。
同理,就算多语阅读、维护代码的可能再小,也不要在标识符中使用非 ASCII 字符
5.数据结构
列表
list.append(x)
list.extend(iterable)
list.insert(i, x)
list.remove(x)
list.pop([i])
list.clear()
list.index(x[, start[, end]])
list.count(x)
list.sort(*, key=None, reverse=False)
list.reverse()
list.copy()
insert、 remove、 sort 等方法只修改列表,不输出返回值——返回的默认值为 None。这是所有Python 可变数据结构的设计原则。
实现堆栈
list.append(x)
list.pop([i])
列表推导式
del按索引移除元素
元组
不可变
集合
字典
字典推导式
dict()
del
循环
字典循环使用items()方法可以同时取出键和对应的值 for k,v in knights.items():
序列循环中使用enumerate()函数可同时取出索引和值 for i,v in enumerate():
循环多个序列可以使用zip()函数将其内元素一一匹配
逆向循环序列,调用reversed()函数
指定顺序循环序列,使用sorted()函数
条件控制
not优先级最高
and
or优先级最低
在表达式内部赋值必须显式使用 海象运算符 :=
6.模块
if __name__ == "__main__":当文件用
模块搜索路径
import sys sys.path
sys.path.append('/ufs/guido/lib/python')
编译
不检查缓存
其一,从命令行直接载入模块,只重新编译,不存储编译结果;
其二,没有源模块,就不会检查缓存。
建议
在 Python 命令中使用 -O 或 -OO 开关,可以减小编译模块的大小。 -O 去除断言语句, -OO 去除断言语句和 __doc__ 字符串。有些程序可能依赖于这些内容,因此,没有十足的把握,不要使用这两个选项。“优化过的”模块带有 opt- 标签,并且文件通常会一小些。将来的发行版或许会改进优化的效果。
• 从 .pyc 文件读取的程序不比从 .py 读取的执行速度快, .pyc 文件只是加载速度更快。
• compileall 模块可以为一个目录下的所有模块创建.pyc 文件。
• 本过程的细节及决策流程图,详见 PEP 3147。
标准模块
dir()
函数 dir() 用于查找模块定义的名称。返回结果是经过排序的字符串列表:
没有参数时, dir() 列出当前定义的名称:
dir() 不会列出内置函数和变量的名称。这些内容的定义在标准模块builtins 里
包
Python 只把含__init__.py 文件的目录当成包
7.输入与输出
更复杂的输出格式
格式化输出
使用格式化字符串字面值,要在字符串开头的引号/三引号前添加f 或F 。在这种字符串中,可以在{和} 字符之间输入引用的变量,或字面值的Python 表达式。
>>> import math >>> print(f'The value of pi is approximately {math.pi:.3f}.') The value of pi is approximately 3.142.
字符串的str.format() 方法需要更多手动操作。该方法也用{ 和} 标记替换变量的位置,虽然这种方法支持详细的格式化指令,但需要提供格式化信息。
用字符串切片和合并操作完成字符串处理操作,创建任何排版布局。
str() 函数返回供人阅读的值
repr() 则生成适于解释器读取的值(如果没有等效的语法,则强制执 行SyntaxError)
字符串对象的str.rjust() 方法通过在左侧填充空格,对给定宽度字段中的字符串进行右对齐。同类方法还有str.ljust() 和str.center() 。这些方法不写入任何内容,只返回一个新字符串
另一种方法是str.zfill() ,该方法在数字字符串左边填充零,且能识别正负号
% 运算符(求余符)也可用于字符串格式化。给定'string' % values,则string 中的% 实例会以零个或多个values 元素替换。此操作被称为字符串插值
文件
open() 返回file object,最常用的参数有两个: open(filename, mode)。mode 实参是可选的,省略时的默认值为'r'。
在处理文件对象时,最好使用with 关键字。优点是,子句体结束后,文件会正确关闭,即便触发异常也可以。而且,使用with 相比等效的try-finally 代码块要简短得多
在文本模式下读取文件时,默认把平台特定的行结束符(Unix 上为\n, Windows 上为\r\n)转换为\n。在文本模式下写入数据时,默认把\n 转换回平台特定结束符。这种操作方式在后台修改文件数据对文本文件来说没有问题,但会破坏JPEG 或EXE 等二进制文件中的数据。注意,在读写此类文件时,一定要使用二进制模式。
f.read(size) 可用于读取文件内容,它会读取一些数据,并返回字符串(文本模式),或字节串对象(在二进制模式下)。
f.readline() 从文件中读取单行数据;字符串末尾保留换行符(\n),只有在文件不以换行符结尾时,文件的最后一行才会省略换行符。
f.write(string) 把string 的内容写入文件,并返回写入的字符数。
f.tell() 返回整数,给出文件对象在文件中的当前位置,表示为二进制模式下时从文件开始的字节数,以及文本模式下的意义不明的数字。
f.seek(offset, whence) 可以改变文件对象的位置。通过向参考点添加offset 计算位置;参考点由whence 参数指定。whence 值为0 时,表示从文件开头计算,1 表示使用当前文件位置,2 表示使用文件末尾作为参考点。省略whence 时,其默认值为0,即使用文件开头作为参考点。
8.错误与异常
句法错误
异常
异常的处理
触发异常
raise
9.类
两种操作
属性引用使用Python 中所有属性引用所使用的标准语法: obj.name。有效的属性名称是类对象被创建时存在于类命名空间中的所有名称
类的实例化使用函数表示法。可以把类对象视为是返回该类的一个新实例的不带参数的函数。
__init__() 的特殊方法来初始化
实例变量用于每个实例的唯一数据,而类变量用于类的所有实例共享的属性和方法
如果同样的属性名称同时出现在实例和类中,则属性查找会优先选择实例
检查继承机制的函数
使用isinstance() 来检查一个实例的类型: isinstance(obj, int) 仅会在obj.__class__ 为int 或某个派生自int 的类时为True。
使用issubclass() 来检查类的继承关系: issubclass(bool, int) 为True,因为bool 是 int 的子类。但是,issubclass(float, int) 为False,因为float 不是int 的子类。
私有变量
。任何形式为__spam 的标识符(至少带有两个前缀下划线,至多一个 后缀下划线)的文本将被替换为_classname__spam,其中classname 为去除了前缀下划线的当前类名称。这种改写不考虑标识符的句法位置,只要它出现在类定义内部就会进行。
实例方法对象也具有属性
m.__self__ 就是带有m() 方法的实例对象
m.__func__ 则是该方法所对应的函数对象。
迭代器
for 语句会在容器对象上调用iter()。该函数返回一个定义了__next__() 方法的迭代器对象,此方法将逐一访问容器中的元素。当元素用尽时,__next__() 将引发StopIteration 异常来通知终止for 循环。你可以使用next() 内置函数来调用__next__() 方法
生成器
生成器表达式相比完整的生成器更紧凑但较不灵活,相比等效的列表推导式则更为节省内存。
10.标准库
操作系统接口
os 模块提供了许多与操作系统交互的函数
一定要使用import os 而不是from os import * 。这将避免内建的open() 函数被os.open()隐式替换掉,因为它们的使用方式大不相同。
对于日常文件和目录管理任务,shutil 模块提供了更易于使用的更高级别的接口
文件通配符
glob 模块提供了一个在目录中使用通配符搜索创建文件列表的函数
命令行参数
通用实用程序脚本通常需要处理命令行参数。这些参数作为列表存储在sys 模块的argv 属性中
argparse 模块提供了一种更复杂的机制来处理命令行参数
sys 模块还具有stdin ,stdout 和stderr 的属性。后者对于发出警告和错误消息非常有用,即使在stdout 被重定向后也可以看到它们
字符串模式匹配
re
数学
math 模块提供对浮点数学的底层C 库函数的访问
random 模块提供了进行随机选择的工具
statistics 模块计算数值数据的基本统计属性(均值,中位数,方差等)
互联网访问
日期和时间
datetime 模块提供了以简单和复杂的方式操作日期和时间的类。虽然支持日期和时间算法,但实现的重点是有效的成员提取以进行输出格式化和操作。该模块还支持可感知时区的对象。
数据压缩
常见的数据存档和压缩格式由模块直接支持,包括:zlib, gzip, bz2, lzma, zipfile 和tarfile
性能度量
timeit 模块可以快速演示在运行效 率方面一定的优势
profile 和pstats 模块提供了用于在较大的代码块中识别时间关 键部分的工具
质量控制
doctest 模块提供了一个工具,用于扫描模块并验证程序文档字符串中嵌入的测试
unittest 模块不像doctest 模块那样易于使用,但它允许在一个单独的文件中维护更全面的测试集
格式化输出
reprlib 模块提供了一个定制化版本的repr() 函数,用于缩略显示大型或深层嵌套的容器对象
pprint 模块提供了更加复杂的打印控制,其输出的内置对象和用户自定义对象能够被解释器直接读取。当输出结果过长而需要折行时,“美化输出机制”会添加换行符和缩进,以更清楚地展示数据结构
textwrap 模块能够格式化文本段落,以适应给定的屏幕宽度
locale 模块处理与特定地域文化相关的数据格式。locale 模块的format 函数包含一个grouping 属性,可直接将数字格式化为带有组分隔符的样式
模板
string 模块包含一个通用的Template 类,具有适用于最终用户的简化语法。它允许用户在不更改应用逻辑的情况下定制自己的应用。
使用二进制数据记录格式
struct 模块提供了pack() 和unpack() 函数,用于处理不定长度的二进制记录格式。
多线程
日志记录
logging 模块提供功能齐全且灵活的日志记录系统。在最简单的情况下,日志消息被发送到文件或sys.stderr
弱引用
weakref 模块提供的工具可以不必创建引用就能跟踪对象。 当对象不再需要时,它将自动从一个弱引用表中被移除,并为弱引用对象触发一个回调。典型应用包括对创建开销较大的对象进行缓存
用于操作列表的工具
array 模块提供了一种array() 对象,它类似于列表,但只能存储类型一致的数据且存储密集更高。
十进制浮点运算
decimal 模块提供了一种Decimal 数据类型用于十进制浮点运算。相比内置的float 二进制浮点实现,该类特别适用于 • 财务应用和其他需要精确十进制表示的用途, • 控制精度, • 控制四舍五入以满足法律或监管要求, • 跟踪有效小数位,或 • 用户期望结果与手工完成的计算相匹配的应用程序。