PEP8 python编码规范
代码要可维护、可扩展、可被人阅读;自己要形成自己的代码规范,统一风格。PEP8是python作者写的一份python代码规范指南安装PEP8检查程序:
pip install pycodestyle
pycodestyle xxxx.py使用IDE:pycharm(默认检查)
代码布局
每一级缩进使用四个空格
python使用严格的代码缩进方式分隔代码块
制表符只能用于与同样使用制表符缩进的代码保持一致
不允许同时使用空格和制表符缩进
所有行限制的最大字符数79,文档或注释等没有结构化限制的大块文本行最大限制字符数72,太长可换行,括号里的直接回车换行,符号跟下行,上下对其;字符串中\ 换行,上下对其。
文档说明 空一行 引用包 空两行定义类和函数 类里面方法间空一行,变量赋值和导入声明之间插入空行,分割语义
分行导入不同的包,同一个包不同方法同行导入;避免使用通配符*导入;
函数名和后面的()之间不要加空格;:之前不要加空格;()内的参数之间可以在,之后加空格;=等二元运算符前后加空格;制定关键字参数或者默认参数值的时候,= 附近不加空格。
命名规范
那些暴漏给用户的API接口的命名,应该遵循反映使用场景而不是实现的原则
使用英文单词命名,不要使用拼音和简拼
不要害怕过长的命名变量,越清楚越好
避免重复使用变量名表示不同对象
不能使用内建名称
避免使用大小写区分不同对象
使用下划线分割小写单词提高可读性
大写字母单词来表示常量
驼峰命名法 缩写全部大写
包名全部小写;类名首字母大写;函数名小写;
注释
当代码更改时优先更改注释
尽量使用英文写注释
句尾结束时应该使用两个空格块注释 ‘’‘ 对一段代码进行的注释 与代码在不同的行’‘’ ####
行注释 # 与代码在同一行的
文章注释 ‘’‘ 函数或者文件下面的详细解释 ’‘’
有节制的使用行注释,否则使用块注释
为所有公共模块,函数编写文档说明,文档说明要描述方法的功能、对参数、返回值和可能的异常进行说明
仅仅注释不是一目了然的,难以理解的代码进行注释,注释用来解释代码的功能、原因和想法,不是对代码本身的解释;不需要的代码直接删除,成熟代码不要有注释代码
惯用原则采用内联形式的否定词,而不要把否定词放在整个表达式的前面。例如if a is not b就比if not a is b更容易让人理解。
不要用检查长度的方式来判断字符串、列表等是否为None或者没有元素,应该用if not x这样的写法来检查它。
就算if分支、for循环、except异常捕获等中只有一行代码,也不要将代码和if、for、except等写在一起,分开写才会让代码更清晰。
import语句总是放在文件开头的地方。
引入模块的时候,from math import sqrt比import math更好。
如果有多个import语句,应该将其分为三部分,从上到下分别是Python标准模块、第三方模块和自定义模块,每个部分内部应该按照模块名称的字母表顺序来排列。
变量、函数和属性应该使用小写字母来拼写,如果有多个单词就使用下划线进行连接。
类中受保护的实例属性,应该以一个下划线开头。
类中私有的实例属性,应该以两个下划线开头。
类和异常的命名,应该每个单词首字母大写。
模块级别的常量,应该采用全大写字母,如果有多个单词就用下划线进行连接。
类的实例方法,应该把第一个参数命名为self以表示对象自身。
类的类方法,应该把第一个参数命名为cls以表示该类自身。
编码建议
编码中考虑到其他python实现的效率等问题,比如运算符‘+’在CPython(Python)中效率高,但是Jython中却非常低,所以应该采用.join()的方式
尽可能使用‘is’‘is not’取代‘==’,比如if x is not None 要优于if x
使用基于类的异常,每个模块或包都有自己的异常类,此异常类继承自Exception
异常中不要使用裸露的except,except后跟具体的exceptions
异常中try的代码尽可能少
使用startswith() and endswith()代替切片进行序列前缀或后缀的检查。比如
Yes: if foo.startswith(‘bar’):优于
No: if foo[:3] == ‘bar’:使用isinstance()比较对象的类型。比如
Yes: if isinstance(obj, int): 优于
No: if type(obj) is type(1):判断序列空或不空,有如下规则
Yes: if not seq:
if seq:优于
No: if len(seq)
if not len(seq)字符串不要以空格收尾
二进制数据判断使用 if boolvalue的方式
















