代码布局
1.1 编码
所有的 Python 脚本文件都应在文件头标上如下标识或其兼容格式的标识。
示例:# -*- coding:utf-8 -*-
1.2 注释
Python 的注释分为两种的概念,一种是由 # 开头的“真正的”注释,另一种是 docstrings。前者表明为何选择当前实现以及这种实现的原理和难点,后者表明如何使用这个包、模块、类、函数(方法),甚至包括使用示例和单元测试。
示例1:def request_handler(argu_data):
handler = ScheduleResult(config, clog) # This is a test!
ret = handler.schedule_result(argu_data)
return ret
示例2:class StatusRequst(tornado.web.RequestHandler):
"""docstring for StatusRequst"""
def get(self):
argu_data = self.request.body.decode('utf8')
self.write("living")
原则:
- 添加注释,涉及重要业务逻辑时必须要加注释,对于大型项目开发时,注释很重要。
- 注释必须使用英文,最好是完整的句子,首字母大写,句后要有结束符,结束符后跟两个空格,开始下一句。如果是短语,可以省略结束符。
- 行注释:在一句代码后加注释,但是这种方式尽量少使用。比如:x = x + 1 # Increment
- 块注释:在一段代码前增加的注释。在‘#’后加一空格。段落之间以只有‘#’的行间隔。
1.3 缩进
缩进在Python中很重要,tab制表符和空格不能混用,否则会导致python运行报错。在逻辑行首的空白(空格和制表符)用来决定逻辑行的缩进层次,从而用来决定语句的分组。
建议使用:4个空格
1.4 行长度
行的最大长度主要是为了保持代码的阅读性,一般情况下,窗口限制在80个字符。
建议长度:72个字符,目前开发人员一般都会配备显示器,可根据业务实际需要调整到100-120个字符。
1.5 空行
适当的空行有利于增加代码的可读性,加空行可以参考如下几个准则:
- 在import不同种类的模块间加空行
- 用两行空行分割顶层函数和类的定义,类内方法的定义用单个空行分割。
- 函数之间单个空行
- 在函数中的逻辑段落间加空行,即把相关的代码紧凑写在一起,作为一个逻辑段落,段落间以空行分隔;
1.6 空格
空格在Python代码中是有意义的,因为Python的语法依赖于缩进,但适当地加入空格可以增进代码的可读性。参考标准如下:
- 总体原则,避免不必要的空格。
- 各种右括号前不要加空格。
- 函数的左括号前不要加空格。如Func(1)。
- 序列的左括号前不要加空格。如list[2]。
- 逗号、冒号、分号前不要加空格。
- 操作符(=/+=/-+/==/</>/!=/<>/<=/>=/in/not in/is/is not/and/or/not)左右各加一个空格,不要为了对齐增加空格。如果操作符有优先级的区别,可考虑在低优先级的操作符两边添加空格。如:hypot2 = x*x + y*y; c = (a+b) * (a-b)
- 函数默认参数使用的赋值符左右省略空格。
- 不要将多句语句写在同一行,尽管使用‘;’允许。
9 if/for/while语句中,即使执行语句只有一句,也必须另起一行。
1.7 断行
本规范建议行的最大长度不得超过72个字符的标准
折叠长行的方法有以下几种方法:
- 为长变量名换一个短名,如:longggggg1 = longggggg2, 改为l_g1 = longggggg1, l_g2=longggggg2, l_g1=l_g2
- 在括号(包括圆括号、方括号和花括号)内换行,如:
def test(v1, v2,
v2, v4):
xxxxx
- 在长行加入续行符强行断行,断行的位置应在操作符前,且换行后多一个缩进,以使维护人员看代码的时候看到代码行首即可判定这里存在换行
if value == "b" or value == c \
or value == "d": # 注意 or 操作符在新行的行首而不是旧行的行尾,上一行
1.8 导入
imports 通常被放置在文件的顶部,仅在模块注释和文档字符串之后,在模块的全局变量和常量之前。imports应该有顺序地成组安放:
import 语句有以下几个原则需要遵守:
- import Python 内置模块
2.import第三方模块
3.import自己开发的项目中的其它模块;
这几种模块中用空行分隔开来。一条import语句import一个模块。
不要使用 from module import *,除非是import常量定义模块或其它你确保不会出现命名空间冲突的模块。
2 命名
2.1 常量
常量名所有字母大写,由下划线连接各个单词,如:
CONST = value
CONST_VALUE = 1
2.2 变量
变量名全部小写,由下划线连接各个单词,如:
t_type = "on"
status = 1
2.3 函数
函数名全部小写,由下划线连接各个单词,同变量命名。
建议:一个函数不要超过 30 行代码, 即可显示在一个屏幕类,可以不使用垂直游标即可看到整个函数
2.4 类
- 类名单词首字母大写,不使用下划线连接单词。如:
class BaseModle(object):
pass
- 类的属性(方法和变量)命名使用全部小写的方式,可以使用下划线。
建议:不要超过 200 行代码,不要有超过 10 个方法
2.5 模块和包
模块和名全部小写,对于包内使用的模块,可以加一个下划线前缀,如:
module.py
_internal_module.py
建议:一个模块 不要超过 500 行。
2.6 其他
- 用复数形式命名序列
members = ['user_1', 'user_2']
- 用显式名称命名字典
person_address = {'user_1':'10 road WD', 'user_2' : '20 street huafu'}
- 避免通用名称
诸如 list, dict, sequence 或者 element 这样的名称应该避免。
- 避免现有名称
诸如 os, sys 这种系统已经存在的名称应该避免。
3 其他
3.1 赋值
等号两边需有空格,无所谓对齐
a = 1
var = 2
3.2 分支和循环
对于分支和循环,为了使逻辑更清晰,需注意:
不要写成一行,如:
if not flg: pass
和
for i in xrange(10): print i
应写成
if not flg:
pass
for i in xrange(10):
print i
4 总结
以上规范基本按照python PEP8摘录,在编码过程中也可以用pep8脚本验证你的python程序。
基本安装方法命令: pip install pep8