Python官方文档: https://www.python.org/dev/peps/pep-0008/
代码风格:
- 使用4个空格来表示缩进,最好不使用tab,更勿将两者混用
- 函数间换行至少一行
- 类之间换行至少两行
- 字典,列表,元祖中元素应该在逗号前添加一个空格
- 字典中键后面的冒号:应在值与冒号:之间添加空格,而不是:与键之前间. 比如说: {‘name’:‘tom’}
- 较长代码(>79字符)使用\换行。换行后新行的起始处应该与前一个分隔符对齐(是参数换行则与左括号对齐
- import位于module comments与docstring之后,常量声明之前
- 如多模块,请分开导入. 像import os, sys是不规范的.
- Docstring的常规写法
"""Return foobang
Optional plotz says to frobnicate the bizbaz first.
"""
- Python 3.0以下版本的代码文件建议以latin字符编码。3.0以上则推荐utf-8
- 代码中有操作符运算,请注意优先级,优先的操作紧缩,或者加括号
- “=”,”==”左右两边加一个空格如: if x == 1: print(‘OK’), 但在函数或方法中最好不用空格
比如说:def func(file=’d://1.txt’)
- 尽量不要将多行代码放在同一行
- 少使用行后注释
- 用#开头的多行函数注释,保持与目标函数相同的缩进
- docstring ,开头一行写上返回值,接下来一行写函数功能描述,后可按照格式>>> func(arg1, arg2, arg3) / r 返回值,以便于测试.
- 另外,若要使用subversion,cvs等源代码管理工具。可以在函数的docstring 之后,code之前写上__version__ = "$Revision:$"
命名规则:
- 尽量少用 'l' , 'O' , or 'I',单字母作为变量的命名.---说老实话,这样很容易混淆,搞不清楚谁是谁!
- 包和模块应该用短且全小写字母:modulename
- 类名首字母大写的形式命名:ClassName
- 异常类则用以Error结尾的字符串命名为宜: YourError
- 全局变量尽量只是设计用于模块内使用,并且可以用import *时,包内的__all__机制来除去全局变量
- 函数名尽量都用小写且单词间以_(下划线)连接,比如说:function_name(arg1, arg2, *args, **kwargs)
- 函数和方法参数,self作为实例方法的第一个参数,cls作为类方法的第一个参数,倘若参数名与关键字相同,为了避讳,则应该加个下划线
- 方法名&类实例的属性方法名规则与函数名相同,类实例私有属性和类实例的私有方法以单个下划线开头_private_fuc_name(self)
- 常量全大写,多个单词的话以下划线间隔: TOTAL 或 CONSTANT_VAR
- 面向对象设计建议:
- 若对类实例中的属性是设置成public的好还是private好,可以考虑先设置成private,其修改成本更低.
- private不能被第三方使用,因为随时有可能被删除、废弃,public属性不能用下划线开头
- 避免属性使用大运算量操作
- 倘若不想被子类继承的属性,应该用双下划线开头,且最后没有下划线。这样会启动python的命名识别矫正处理算法,保证不被继承
编码建议:
- 无论是在哪种Python(Cython,Jython,IconPython,PyPy等),保持一致的格式。比如说,要联合两个字符串,a = a + b, a += b,都不如用’’.join()好。
- None前面别用==,而应该用is或者is not.
- 用is not,而不是not is
正确: ifa is not None:
错误: if a not isNone:
- 一旦涉及到__eq__ , __ne__ , __lt__ , __le__ , __gt__ , __ge__比较操作,最好6个全部实现,而不是只实现其中部分,而依赖其他函数.
- 别用匿名函数来赋值给某个变量,而应该用def函数.
正确: deff(x): return x*2
错误: f = lambda x: x*2
- 派生异常继承自Exception,而不是BaseException.