参考链接:添加链接描述
自己选择的编码风格如下:
1、缩进:
每级缩进使用4个空格
与分界符对齐:
vars = fun(var_1,var_2,
var_3,var_4)
2、if 语句:
在条件接续行,增加额外的缩进
if (condition_1
and condition_2)
do()
3、多行结构中的结束花括号/中括号/圆括号是最后一行的第一个非空白字符,花括号/圆括号中的元素与名称有一个单位的缩进
tmp_list = [
1,2,3,
4,5,6,
]
res = fun(
a,b,c,
d,e,f,
)
4、行的最大长度为79个字符
折叠长行的首选方法是在小括号,中括号,大括号中使用Python隐式换行。长行可以在表达式外面使用小括号来变成多行。连续行使用反斜杠更好
5、二元操作符
操作符在被操作对象之前
res = (var_one
-var_tow
+var_th
)
6、空行
- 类内部函数定义之间一个空行
- 顶级函数和类定义之间两行空行
- 主要空行的使用,可以用于分隔功能组
7、导入:
通常为单独的一行
导入的顺序如下:
- 标准库
- 第三方
- 本地应用
每个导入组之间放一行空行
把任何相关__all__规范放在导入之后
8、模块级别的内置属性
模块级别的内置属性(名字有前后双下划线的),例如__all__, author, version,应该放置在模块的文档字符串后,任意import语句之前,from __future__导入除外。Python强制要求from __future__导入必须在任何代码之前,只能在模块级文档字符串之后。
9、字符串引号
选择使用双引号/单引号,并坚持一条规则
10、表达式和语句中的空格
避免适合用多余的空格
- 紧挨着小括号,中括号或大括号。
Yes : (h
NO : ( h
- 紧挨着逗号,分号,或者冒号前面
Yes: if x==1: print x,y; x, y = y,x
No : if x==1 : print x , y ; x , y = y , x
- 左括号,紧挨着函数调用
Y: fun(2)
N: fun (2)
- 左括号紧挨着索引或者切片
Y: tmp_list[1:2]
N: tmp_list [1:2]
- 在二元操作符的两边放置一个空格
- 在表示默认参数的参数值时,=两侧不使用空格
11、注释
…
为所有公共模块,函数,类和方法书写文档字符串。对非公开的方法书写文档字符串是没有必要的,但应该写注释描述这个方法是做什么的。这些注释应该写在def行后面
12、名命规则
注意在使用驼峰名命规则时,需要大写所有的缩写字母
- 模块名所有字母都小写
- 类名首字母大写
- 类变量名称首字母大写
- 异常类,可以加上后缀Error
- 应使用__all__机制防止导出全局变量
- 函数名应该是小写字母,必要时单词用下划线分开以提高可读性
- 函数和方法参数:使用self做实例化方法的第一个参数;使用cls做类方法的第一个参数。
- 方法名小写字母
- 常量:所有的字母都大写,并常用下划线分开
13、其他建议
- 不要依赖CPython的高效实现字符串连接的语句形式 += b或a = a + b
- 与单值比如None比较使用is 或is not
- 适当使用异常链。Python3中,“raise X from Y”用来表明明确的更换而不失去原来追踪到的信息
- Python 3中产生异常,使用raise ValueError(‘message’)替换老的形式raise ValueError,‘message’。