编码
所有的 Python 脚本文件都应在文件头标上 # -*- coding:utf-8 -*- 。设置编辑器,默认保存为 utf-8 格式。
注释
坚持适当注释原则。对不存在技术难点的代码坚持不注释,对存在技术难点的代码必须注释。但与注释不同,推荐对每一个包、模块、类、函数(方法)写 docstrings,除非代码一目了然,非常简单。
缩进
代码缩进使用4个空格。行首空白符主要有两种:tab 和空格,但严禁两者混用。如果使用 tab 缩进,设定 tab 为 4 个空格。
命名规则
1)命名格式
module_name,package_name,ClassName,method_name,ExceptionName, function_name,GLOBAL_CONSTANT_NAME, global_var_name, instance_var_name, function_parameter_name, local_var_name.
Type Packages Modules Classes Exceptions Functions Global/Class Constants Global/Class Variables Instance Variables Public lower_with_under lower_with_under CapWords CapWords lower_with_under() CAPS_WITH_UNDER lower_with_under lower_with_under _lower_with_under _CapWords _lower_with_under() _CAPS_WITH_UNDER _lower_with_under _lower_with_under (protected) or __lower_with_under (private) _lower_with_under()(protected) or__lower_with_under() (private) Internal Method Names Function/Method Parameters Local Variables lower_with_under() lower_with_under lower_with_under 2)用 has 或 is 前缀命名布尔元素 is_connect = True has_member = False
3)用复数形式命名序列 members = ['user_1', 'user_2'] 4)用显式名称命名字典
person_address = {'user_1':'10 road WD', 'user_2' : '20 street huafu'} 5)避免通用名称
诸如 list, dict, sequence 或者 element 这样的名称应该避免。 6)避免现有名称
诸如 os, sys 这种系统已经存在的名称应该避免。
空行
适当的空行有利于增加代码的可读性,加空行可以参考如下几个准则: 1) 在类、函数的定义间加空行;
2) 在 import 不同种类的模块间加工行; 3) 在函数中的逻辑段落间加空行,即把相关的代码紧凑写在一起,作为一个逻辑段落,段落间以空行分隔;
分号
不要在行尾使用分号
行的长度
行的最大长度最好不超过80个字符。不要超过满屏时编辑器的显示字符数。不要使用反斜杠(\\)分隔行,建议在括号(包括圆括号-()、方括号-[]、大括号-{})中换行。 Yes: foo_bar(self, width, height, color='black', design=None, x='foo', emphasis=None, highlight=0) if (width == 0 and height == 0 and color == 'red' and emphasis == 'strong'): 对于需要断行的字符串,可以在括号中进行分割,编译时python会自动对字符串进行连接 Yes: x = ('This will build a very long long ' 'long long long long long long string') 函数的长度
不要超过 30 行代码, 即可显示在一个屏幕类,可以不使用垂直游标即可看到整个函数
类的长度
不要超过200行代码,不要有超过10个方法
模块的长度
不要超过500行
括号
有节制地使用括号,不要给条件语句、return语句加括号
Yes: if foo: bar() while x: x = bar() if x and y: bar() if not x: bar() return foo for (x, y) in dict.items(): ... No: if (x): bar() if not(x): bar() return (foo) 缩进
使用4个空格缩进。不要混用tab和空格。如果每行的长度超过80个字符数,使用下面规则进行对齐。
Yes: # 与起始定界符对齐 foo = long_function_name(var_one, var_two, var_three, var_four) # 第一行空着,悬挂缩进4个空格 foo = long_function_name( var_one, var_two, var_three, var_four) No: # 行首起始定界符有东西 foo = long_function_name(var_one, var_two, var_three, var_four) # 不应该使用两空格的悬挂缩进 foo = long_function_name( var_one, var_two, var_three, var_four) import
import 语句有以下几个原则需要遵守:
1) 每一条import 语句只占一行,一行 import 一个模块;import语言应该位于文件的顶部,在模块说明、docstring之后,模块的全局变量、常量之前
2) import需按照通用程度排序, 标准库导入
相关第三方包导入 本地应用、库的导入
在每组导入之间使用用空行分隔开来。
已有代码
对于项目中已有的代码,可能因为历史遗留原因不符合本规范,应当看作可以容忍的特例,允许存在;但不应在新的代码中延续旧的风格。
对于第三方模块,可能不符合本规范,也应看作可以容忍的特例,允许存在;但不应在新的代码中使用第三方模块的风格。
因篇幅问题不能全部显示,请点此查看更多更全内容