一、代码编排
1.缩进:使用4个空格缩进
2.行长度:每行不要超过80个字符
3.空行:顶级定义之间空两行,如函数或类的定义,方法定义、类定义与第一个方法之间都应该空一行。
4.分号:行尾不要有分号,也不要用分号将两条命令放在一行,除非是:1.长的导入模块语句。2.注释里的URL.3.可以使用圆括号实现隐式行连接
二、文档编排
1.导入:模块注释->文档字符串->导入->模块全局变量->常量
导入顺序:标准库导入->第三方库导入->应用程序指定库导入
2.import:不要在一行中import多个库,一行中只导入一个
三、空格
1.不要在逗号、分号、冒号前加空格,但应在他们后面加(除了在行尾)
2.二元操作符(赋值、比较、布尔)两边都加空格
3.当"="用于指示关键字参数或默认参数值是,不要再其两侧使用空格
4.","和"#"和"="不需要对齐,因为空格会成为维护的负担
四、注释
总体原则,错误的注释不如没有注释。
注释必须使用英文,最好是完整的句子,首字母大写,句后要有结束符,结束符后跟两个空格,开始下一句。如果是短语,可以省略结束符。
1.块注释:在一段代码前增加的注释。在"#"后加一空格。段落之间以只有"#"的行间隔。
2.行注释,在一句代码后加注释。进来少使用.
3.绝不要描述代码. 假设阅读代码的人比你更懂Python, 他只是不知道你的代码要做什么.
五、文档描述
1.为所有的共有模块、函数、类、方法写docstrings;非共有的没有必要,但是可以写注释(在def的下一行)。
2.如果docstring要换行,参考如下例子
class SampleClass(object):
"""Summary of class here.
Longer class information....
Longer class information....
Attributes:
likes_spam: A boolean indicating if we like SPAM or not.
eggs: An integer count of the eggs we have laid.
"""
def __init__(self):
"""Inits SampleClass with blah."""
六、命名规范
1.尽量单独使用小写字母‘l’,大写字母‘O’等容易混淆的字母。
2.模块名尽量短小,应该用小写加下划线的方式(如lower_with_under.py).
3.包命名尽量短小,使用全部小写的方式,不可以使用下划线。
4.类名使用大写字母开头的单词(如CapWords, 即Pascal风格)
5.函数命名使用全部小写的方式,可以使用下划线。
6.变量也用小写加下划线的方式,即this_is_a_variable=1
7.常量命名使用全部大写的方式,可以使用下划线。
8.类的属性(方法和变量)命名使用全部小写的方式,可以使用下划线。
9.类的方法第一个参数必须是self,而静态方法第一个参数必须是cls。
10.用单下划线(_)开头表示模块变量或函数是protected的(使用import * from时不会包含).
11.用双下划线(__)开头的实例变量或方法表示类内私有.
七、Main:即使是一个打算被用作脚本的文件, 也应该是可导入的.
并且简单的导入不应该导致这个脚本的主功能(main functionality)被执行
代码应该在执行主程序前总是检查 if __name__ == '__main__'
def main():
...
if __name__ == '__main__':
main()
八、字符串:
避免在循环中用+和+=来累加字符串,可以将每个子串加入列表,然后再循环结束后使用.join连接列表
items = ['<table>']
for last_name, first_name in employee_list:
items.append('<tr><td>%s, %s</td></tr>' % (last_name, first_name))
items.append('</table>')
employee_table = ''.join(items)
同一文件中保持使用字符串引号的一致性
多行字符串使用三重"双"引号,不过通常使用括号隐式连接
九、其他
括号:宁缺毋滥的使用括号
类:若一个类不继承自其它类,就显式的从object继承,即使是嵌套类
语句:通常每个语句独占一行,try/except一定不放在一行
文件和sockets:在文件和sockets结束时,显式的关闭它,推荐with语句管理文件