a、使用4空格缩进。不使用Tab,更不允许用Tab和空格混合缩进
b、每行最大长度最大79字节,换行可以使用反斜杠,最好使用圆括号
c、类和全局函数定义间隔两个空行,类内方法定义间隔一个空行,其它地方可以不加空行。
模块内容的顺序:模块说明和docstring(文档字符串)—import—globals&constants(常量)—其他定义。其中import部分,又按标准、三方和自己编写顺序依次排放,之间空一行。
不要在一句import中导入多个模块,比如不推荐import os, sys。
尽可能用import XX 而不采用from XX import YY引用库,因为可能出现名字冲突。
总体原则,避免不必要的空格。
a、各种右括号前不用加空格
b、逗号、冒号、分号前不要加空格。
c、函数的左括号前不要加空格。如func(1)。
d、序列的左括号前不要加空格。如list[2]。
e、操作符左右各加一个空格,不要为了对齐增加空格。
f、函数默认参数使用的赋值符左右省略空格。
g、不要将多条语句写在同一行,尽管使用‘;’允许。
h、if/for/while语句中,即使执行语句只有一句,也必须另起一行
总体原则,错误的注释不如没有注释。所以当一段代码发生变化时,第一件事就是要修改注释!
避免无谓的注释。
为所有的共有模块、函数、类、方法写docstrings。
a、避免单独使用小写字母‘l’,大写字母‘O’等容易混淆的字母。
b、模块命名尽量短小,使用全部小写的方式,可以使用下划线。
c、包命名尽量短小,使用全部小写的方式,不可以使用下划线。
d、类的命名使用CapWords的方式,模块内部使用的类采用_CapWords的方式。
e、异常命名使用CapWords+Error后缀的方式。
f、全局变量尽量只在模块内有效,类似C语言中的static。实现方法有两种,一是__all__机制;二是前缀一个下划线。
g、函数命名使用全部小写的方式,可以使用下划线。
h、常量命名使用全部大写的方式,可以使用下划线。
i、类的属性(方法和变量)命名使用全部小写的方式,可以使用下划线。
j、类的属性有3种作用域public、non-public和subclass API。
k、类的属性若与关键字名字冲突,后缀一下划线,尽量不要使用缩略等其他方式。
l、为避免与子类属性命名冲突,在类的一些属性前缀一下划线,前缀两条下划线。比如:类Foo中声明__a,访问时,只能通过Foo._Foo__a,避免歧义。如果子类也叫Foo,那就无能为力了。
m、类的方法第一个参数必须是self,而静态方法第一个参数必须是cls。
字符串(str)、列表(list)、元组(tuple)、字节串(bytes)、字节数组 (bytearray)
可变序列:列表(list)、字节数组 (bytearray)
不可变序列:字符串(str)、元组(tuple)、字节串(bytes)
字典的值(value)可以是任意类型:
字典的值可以是布尔值,数据,字符串,None,列表,元组,字典,集合,函数,类对象等所有类型
字典的键(key)必须为不可变类型的值:(集合内的元素必须是不可变的对象)
不可变的类型:
bool,int,float,complex,str,tuple,frozenset(固定集合)、字节串(bytes)
包括:None
注:可变类型:列表(list),字典(dict),集合(set)、字节数组 (bytearray)
序列:字符串(str)、列表(list)、元组(tuple)、字节串(bytes)、字节数组 (bytearray)
字典:字典是可迭代对象,字典只能对键进行迭代访问
集合(set)、固定集合(frozenset)
类变量:类变量是类的属性,此属性属于类,不属于此类创建的实例
实例变量(属性):每个实例可以有自己的变量,称为实例变量(属性)
class A():
v = 100 # 类变量
x = 99 # 类变量
def __init__(self):
self.v = 200 # 实例变量(属性)
a = A()
print(a.v) # 200 访问实例变量
print(a.__dict__["v"]) # 200 访问实例变量
print(a.x) # 99 通过实例对象访问类变量,条件:实例变量(属性)没有和类变量重名
print(A.v) # 100 通过类A 访问自身的类变量
print(a.__class__.v) # 100 通过实例对象属性(__class__)获得绑定的类A ,然后访问类变量
浅拷贝
L1 = [1,2,3]
L2 = L1.copy() # 方法1
L2 = L[:] # 方法2 切片复制是浅拷贝
L2 = L[::] # 方法3 切片复制是浅拷贝
L2 = copy.copy(L1) # 方法3 copy模块中的方法 import copy
深拷贝
L2 = copy.deepcopy(L1) # 调用深拷贝函数进行复制
运算符 | 描述 |
---|---|
(), [], {key: value}, {} | 元组表达式、列表表达式、字典表达式、集合表达式 |
x[index], x[index:index], | 索引,切片, |
x(arguments...), x.attribute | 函数调用,属性引用 |
** | 指数 (最高优先级) |
~, +, - | 按位翻转, 正号,负号 |
*, /, %, // | 乘,除,取模和地板除 |
+, - | 加法, 减法 |
>>, << | 右移, 左移运算符 |
& | 位与(AND) |
^ | 位异或(XOR) |
| | 位或(OR) |
<=, <, >, >=, ==, !=, is, is not, in, not in |
比较,身份测试,成员资格测试 |
not | 布尔非 |
and | 布尔与 |
or | 布尔或 |
if - else | 条件表达式 |
lambda | lambda表达式 |
错误类型 | 说明 |
---|---|
ZeroDivisionError | 除(或取模)零 (所有数据类型) |
ValueError | 传入无效的参数 |
AssertionError | 断言语句失败 |
StopIteration | 迭代器没有更多的值 |
IndexError | 序列中没有此索引(index) |
IndentationError | 缩进错误 |
IOError | 输入/输出操作失败 |
ImportError | 导入模块/对象失败 |
NameError | 未声明/初始化对象 (没有属性) |
AttributeError | 对象没有这个属性 |
BaseException | 所有异常的基类 |
SystemExit | 解释器请求退出 |
KeyboardInterrupt | 用户中断执行(通常是输入^C) |
Exception | 常规错误的基类 |
GeneratorExit | 生成器(generator)发生异常来通知退出 |
StandardError | 所有的内建标准异常的基类 |
ArithmeticError | 所有数值计算错误的基类 |
FloatingPointError | 浮点计算错误 |
OverflowError | 数值运算超出最大限制 |
EOFError | 没有内建输入,到达EOF 标记 |
EnvironmentError | 操作系统错误的基类 |
OSError | 操作系统错误 |
WindowsError | 系统调用失败 |
LookupError | 无效数据查询的基类 |
KeyError | 映射中没有这个键 |
MemoryError | 内存溢出错误(对于Python 解释器不是致命的) |
UnboundLocalError | 访问未初始化的本地变量 |
ReferenceError | 弱引用(Weak reference)试图访问已经垃圾回收了的对象 |
RuntimeError | 一般的运行时错误 |
NotImplementedError | 尚未实现的方法 |
SyntaxError Python | 语法错误 |
TabError | Tab 和空格混用 |
SystemError | 一般的解释器系统错误 |
TypeError | 对类型无效的操作 |
UnicodeError | Unicode 相关的错误 |
UnicodeDecodeError | Unicode 解码时的错误 |
UnicodeEncodeError | Unicode 编码时错误 |
UnicodeTranslateError | Unicode 转换时错误 |
以下为警告类型 | |
Warning | 警告的基类 |
DeprecationWarning | 关于被弃用的特征的警告 |
FutureWarning | 关于构造将来语义会有改变的警告 |
OverflowWarning | 旧的关于自动提升为长整型(long)的警告 |
PendingDeprecationWarning | 关于特性将会被废弃的警告 |
RuntimeWarning | 可疑的运行时行为(runtime behavior)的警告 |
SyntaxWarning | 可疑的语法的警告 |
UserWarning | 用户代码生成的警告 |
数值对象的构造(创建)函数
函数 | 说明 |
---|---|
float(obj) | 用字符串或数字转换为浮点数, 如果不给出参数,则返回0.0 |
int(x, base=10) | 用数字或字符串转换为整数,如果不给出参数,则返回0 |
complex(r=0.0, i=0.0) | 用数字创建一个复数(实部为r,虚部为i) |
bool(x) | 用x创建一个布尔值(True/False) |
预置(内建)的数值型函数
函数 | 说明 |
---|---|
abs(x) | 取x的绝对值 |
round(number[, ndigits]) | 对数值进行四舍五入, ndigits是小数向右取整的位数, 负数表示向左取整 |
pow(x, y, z=None) | 相当于x ** y 或 x**y % z |
help函数
>>> help(abs) # 查看abs函数的帮助
基本输入 input
函数 | 说明 |
---|---|
input('提示字符串') | 返回输入的字符串(仅Python3)('提示字符串' 可以是空) |
基本输出函数 print
函数 | 说明 |
---|---|
print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False) | 将一系列的值以字符串形式输出到 标准输出设备上,默认为终端. |
参数选项
选项的关键字参数为:
sep: 两个值之间的分隔符,默认为一个空格' '
end: 输出完毕后在流末尾自动追加一个字符串,默认为换行符'\n'
file: 流对象,默认为sys.stdout.
flush: 是否立即将流进行输出
字符串编码转换函数
函数 | 说明 |
---|---|
ord(c) | 返回一个字符的Unicode值 |
chr(i) | 返回i这个值所对应的字符 |
整数转换为字符串函数
函数 | 说明 |
---|---|
hex(i) | 将整数转换为十六进制字符串 |
oct(i) | 将整数转换为八进制字符串 |
bin(i) | 将整数转换为二进制字符串 |
字符串构造函数
函数 | 说明 |
---|---|
str(obj='') | 将对象转换为字符串 |
函数 | 意义 |
---|---|
range(stop) | 从零开始,每次生成一个整数后加1操作,直到stop为止(不包含stop) |
range(start,stop[,step]) | 从start开始,每次生成一个整数后移动step,直到stop为止(不包含stop,且step可以是负数) |
函数 | 说明 |
---|---|
list() | # 生成一个空的列表 等同于 [] |
list(iterable) | # 用可迭代对象创建一个列表 |
函数 | 说明 |
---|---|
tuple() | 生成一个空的元组,等同于 () |
tuple(iterable) | 用可迭代对象生成一个元组 |
函数 | 说明 |
---|---|
len(seq) | 返回序列的长度 |
max(x) | 返回序列的最大值的元素 |
min(x) | 返回序列的最小值的元素 |
sum(x) | 返回序列中所有元素的和 |
any(x) | 真值测试,如果列表中其中一个值为真值则返回True |
all(x) | 真值测试,如果列表中所有值为真值则返回True |
reversed(seq) | 返回反向顺序的迭代器对象 |
sorted(iterable, key=None, reverse=False) | 返回已排序的列表 |
函数 | 说明 |
---|---|
dict() | # 生成一个空的字典 等同于 {} |
dict(iterable) | 用可迭代对象初始化一个字典 |
dict(**kwargs) | 命名关键字传参形式生成一个字典 |
集合函数set
函数 | 说明 |
---|---|
set() | 创建一个空的集合对象(不能用{}来创建空集合) |
set(iterable) | 用可迭代对象创建一个新的集合对象 |
固定集合函数 frozenset
函数 | 说明 |
---|---|
frozenset() | 创建一个空的固定集合对象 |
frozenset(iterable) | 用可迭代对象创建一个新的固定集合对象 |
函数 | 说明 |
---|---|
globals() | 返回当前全局作用域内变量的字典 |
locals() | 返回当前局部作用域内变量的字典 |
函数 | 说明 |
---|---|
eval(source, globals=None, locals=None) | 把一个字符串source当成一个表达式来执行,返回表达式执行后的结果 |
exec(source, globals=None, locals=None) | 把一个字符串source当成程序来执行. |
map、filter、sorted函数
函数 | 说明 |
---|---|
map(func, *iterables) | 用函数和对可迭代对象中的每一个元素作为参数计算出新的可迭代对象,当最短的一个可迭代对象不再提供数据时此可迭代对象生成结束 |
filter(function, iterable) | 筛选可迭代对象iterable中的数据,返回一个可迭代器对象,此可迭代对象将对iterable进行筛选.函数function 将对iterable中的每个元素进行求值,返回False则将此数据丢弃,返回True,则保留此数据 |
sorted(iterable, key=None, reverse=False) | 将原可迭代对象的数据进行排序,生成排序后的列表 iterable 可迭代对象 key 函数是用来提供一个值,这个值将作为排序的依据 reverse 标志用来设置是否降序排序 |
函数 | 说明 |
---|---|
dir([对象]) | 返回一个字符串列表 |
dir函数函数说明
函数 | 说明 |
---|---|
iter(iterable) | 从可迭代对象中返回一个迭代器,iterable必须是能提供一个迭代器的对象 |
next(iterator) | 从迭代器iterator中获取一下个记录,如果无法获取一下条记录,则触发 StopIteration 异常 |
迭代工具函数
函数 | 说明 |
---|---|
zip(iter1 [,iter2 [...]]) | 返回一个zip对象, 此对象用于生成一个元组,此元组的个数由最小的可迭代对象决定 |
enumerate(iterable[, start]) | 生成带索引的枚举对象,返回的迭代类型为索引-值对(index-value)对,默认索引从零开始,也可以用start指定 |
字节串函数bytes
函数 | 说明 |
---|---|
bytes() | 生成一个空的字节串 等同于 b'' |
bytes(整型可迭代对象) | 用可迭代对象初始化一个字节串 |
bytes(整数n) | 生成n个值为0的字节串 |
bytes(字符串, encoding='utf-8') | 用字符串的转换编码生成一个字节串 |
字节数组函数 bytearray
函数 | 说明 |
---|---|
bytearray() | 创建空的字节数组 |
bytearray(整数) | 用可迭代对象初始化一个字节数组 |
bytearray(整型可迭代对象) | 生成n个值为0的字节数组 |
bytearray(字符串, encoding='utf-8') | 用字符串的转换编码生成一个字节数组 |
字符 | 含义 |
---|---|
open(file, mode='rt') | 用于打开一个文件,返回此文件流对象. 如果打开文件失败,则会触发OSError 错误! 如果要打开的文件不存在,则会触发FileNotFoundError 错误! |
mode 模式字符的含义
字符 | 含义 |
---|---|
'r' | 以只读方式打开(默认) |
'w' | 以只写方式打开,删除原有文件内容(如果文件不存在,则创建该文件并以只写方式打开) |
'x' | 创建一个新文件, 并以写模式打开这个文件,如果文件存在则会产生"FileExistsError"错误 |
'a' | 以只写文件打开一个文件,如果有原文件则追加到文件末尾 |
'b' | 用二进制模式打开 |
't' | 文本文件模式打开 (默认) |
'+' | 为更新内容打开一个磁盘文件 (可读可写) |
函数 | 说明 |
---|---|
getattr(obj, name[, default]) | 从一个对象得到对象的属性;getattr(x, 'y') 等同于x.y; 当属性不存在时,如果给出default参数,则返回default,如果没有给出default 则产生一个AttributeError错误 |
hasattr(obj, name) | 用给定的name返回对象obj是否有此属性,此种做法可以避免在getattr(obj, name)时引发错误 |
setattr(obj, name, value) | 给对象obj的名为name的属性设置相应的值value, set(x, 'y', v) 等同于 x.y = v |
delattr(obj, name) | 删除对象obj中的name属性, delattr(x, 'y') 等同于 del x.y |
函数 | 说明 |
---|---|
super(type, obj) | 返回绑定超类的实例(要求obj必须为type类型的实例) |
super() | 返回绑定超类的实例,等同于:super(class, 实例方法的第一个参数),必须用在方法内 |
函数 | 说明 |
---|---|
issubclass(cls, class_or_tuple) | 判断一个类是否继承自其它的类,如果此类cls是class 或 tuple中的一个派生子类则返回True,否则返回False |
函数 | 说明 |
---|---|
isinstance(obj, class_or_tuple) | 返回这个对象obj 是否是 某个类的对象,或者某些类中的一个类的对象,如果是返回True,否则返回False |
type(obj) | 返回对象的类型 |
人工智能(python)—— 目录汇总