Python风格规范
分号
Tip:不要在行尾加分号,也不要用分号将两条命令放在同一行。
行长度
Tip: 每行不超过80个字符。
例如:1)长的导入模块语句
2)注释里的URL
不要使用反斜杠连接行。
Python会将圆括号、中括号和花括号中的行隐式的连接起来。
括号
Tip:宁缺毋滥的使用括号。
除非是用行连接,否则不要在返回语句或者条件语句中使用括号。
缩进
Tip: 用4个空格来缩进代码。
绝对不要使用tab,也不要tab和空格混用,对于行连接的情况,应该要么垂直对齐换行的 元素,或者使用4空格的悬挂式缩进(这时第一行不应该有参数)。
空行
Tip: 顶级定义之间空两方,方法定义之间空一行。
空两行:函数、类定义。空一行:方法定义、类定义与第一个方法之间。
函数或者方法中,某些地方要是觉得合适,就空一行。
空格
Tip: 按照标准的排版规范来使用标点两边的空格。
括号内不要有空格。
不要在逗号、分号、冒号前面加空格,但应该在它们后面加空格(除了在行尾)。
参数列表、索引或切片的左括号前不应该加空格。
在二元操作符两边都加上一个空格,至于算术操作符两边的空格该如何使用,需要自己好好判断,不过两侧务必保持一切。
当’='用于指定关键词参数或默认参数值时,不要在其两侧使用空格。
不要用空格来垂直对齐多行间的标记。
注释
Tip: 确保对模块、函数、方法和行内注释使用正确的风格。
文档字符串
python有一种独一无二的注释方式:使用文档字符串。文档字符串是包、模块、类或函数里的第一个语句。这些字符串可以通过对象的__doc__成员被自动提取,并且被pydoc所用。一个字符串应该这样组织:首先是一行以句号,问号或感叹号结尾的概述(或者该文档字符串只有一行),接着是一个空行,接着是文档字符串剩下的部分,它应该与文档字符串的第一行的第一个引号对齐
类
Tip:如果一个类不继承自其它类,就显示的从object继承,嵌套类也一样
字符串
Tip: 即使参数都是字符串, 使用%操作符或者格式化方法格式化字符串。不过也不能一概而论,需要在+和%之间好好判定。
避免在循环中使用+和+=操作符来累加字符串,由于字符串是不可变的,这样会创建不必要的你是对象,并且导致二次方而不是线性的运行时间。作为替代方案,可以将每个子串加入列表,然后在循环结束后用.join连接列表。
在同一文件中,保持使用字符串引号的一致性,使用单引号或者双引号之一用以引用字符串,并在同一文件中沿用,在字符串内可以使用另外一种引号,以避免在字符串中使用
为多行字符串使用三重双引号而非三重单引号。当且仅当项目中使用单引号来引用字符串时,才可能会使用三重单引号为非文档字符串的多行字符串来标识引用。文档字符串必须使用三重双引号。
文件和sockets
Tip: 在文件锋sockets结束时,显式的关闭他
除文件外,sockets或其他类似文件的对象在没有必要的情况下打开,会有许多副作用。而且,幻想当文件对象析构时,文件和sockets会自动关闭,试图将文件对象的生命周期和文件的状态绑定在一起的想法都是不现实的。
推荐使用with语句管理文件,对于不支持使用with语句的类似文件的对象,使用contextlib.closing()。
TODO注释
Tip: 为临时代码使用TODO注释,他是一种短期解决方案,不算完美,但够好了。
TODO注释应该在所有开头包含’TODO’字符串,紧跟着是用括号括起来的你的名字,email地址或其他标识符,然后是一个可选的冒号。接着必须有一行注释,解释要做什么,主要目的是为了有一个廷议的TODO格式。
导入格式
Tip:每个导入应该独占一行
导入总应该放在为了将顶部,位于模块注释和文档字符串之后,模块全局变量和常量之前。
导入应该按照从最通用到最不通用的顺序分组:
1) 标准库导入
2) 第三方库导入
3) 应用程序指定导入
每种分组后中,应该根据每个模块的完整包路径按字典序排序,忽略大小写。
语句
Tip: 通常每个语句应该独占一行
不过,如果测试结果与测试语句在一行放得下,也可以将它们放在同一行。如果是if语句,只有是在没有else时才能这样做。特别地,绝不要对try/except这样做,因为try和except不能放在同一行。
访问控制
Tip: 在python中,对于琐碎又不太重要的访问函数,应该直接使用公有变量来取代它,这样可以避免额外的函数调用开销。但添加更多功能时,可以用属性来保持语法的一致性。
命名
Tip:module_name, package_name, ClassName, method_name, ExceptionName, function_name, GLOBAL_VAR_NAME, instance_var_name, function_parameter_name, local_var_name.
应避免的名称:
1) 单字符名称、除了计数器和迭代器。
2) 包/模块名中的连字符(-)。
3) 双下划线开头并结尾的名称。
命名约定:
1) 所谓内部表示仅在模块内使用,或者在类内是保护或私有的。
2) 用单下划线(_)开头表示模块变量或方式proteed的。
3) 用双下划线(__)开头的实例变量或方法表示类内私有。
4) 将相关的类和顶级函数放在同一个模块里
5) 对于类名使用大写字母开头的单词,但是模块名应该用小写加下划线的方式。
Main
Tip: 即使是一个打算被作为脚本的文件,也应该是可导入的,并且简单的导入不应该导致这个脚本的主功能被执行,这是一种副作用,主功能应该放在一个main()函数中。