目标:写出优雅的代码
PEP8编码规范
命名规范
- 模块命名尽量短小,使用全部小写的方式,可以使用下划线
- 函数命名使用全部小写,可以使用下划线,私有函数一般在前面加个下划线
- 常量命名使用全部大写,可以使用下划线
- 类的属性(方法和变量)使用全部小写,可以使用下划线
- 包命名尽量短小,使用全部小写,不可以使用下划线
- 避免使用混淆字母,如‘l’、‘o’等
- 类命名使用AaBb的格式驼峰法,模块内部采用_AaBb的格式
- 异常命名AaBb+Error的方式
- 全局变量尽量只在模块内有效,好像C的static,一种实现方式是_all_机制,一种是前缀一个下划线
- 类的属性鱼关键字冲突,可以后缀下划线,不要使用缩略
- 为了避免与子类属性命名冲突,可以前缀两个下划线。
- 类的方法的第一个参数必须是self,而静态方法第一个参数必须是cls
代码规范
- 缩进,四个空格,不要使用Tap
- 每行代码由长度限制,不宜太长,换行最好使用圆括号,谨慎使用反斜杠
- 类中的方法定义之间空一行;类和顶层函数定义之间空两行;函数内逻辑无关段落空一行,其他地方不空行
- 不要用分号将两条命令放在同一行,一行写一条命令
- 尽量使用is/is not取代‘==’
- 异常中不要使用裸露的except,except后跟具体的exeptions
- 异常中try的代码要少
- 使用startswith() and endswith()代替切片进行序列的前缀或后缀检查
- 使用isinstance()比较对象的类型
- 二进制数据判断使用 if boolvalue
文档规范
模块内容的顺序
每个import语句只导入一个模块,尽量避免一次导入多个模块,从大到小,顺序为:标准库、相关主包、特定应用
1
2import os
import sys
空格
- 右括号、逗号、冒号、分号前面不要空格
- 函数和序列的左括号前不要空格,list[2]
- 操作符的左右各加一个空格,如 + ,‘*,=’两边不空格,
- if/for/while语句中需要另起一行
注释
- 最好是英文注释,完整的句子,首字母大写,句后有结束符
- 尽量多使用块注释,在一段代码前增加注释,#后面加一个空格,减少行注释和不必要注释
- 为所有的共有模块、函数、类、方法写docstrings,私有的不一写,但可以在def后提供一个块注释说明