Python编程规范
2017-02-19
Python编程规范
1. 行长与换行
为了增强可读性,建议代码每行长度不超过80个字符,import
和comment
除外;
虽然反斜杠\
可以把不同的行内容连接起来,但是仍然不建议使用。实际上,Python中规定圆括号、方括号和花括号可以跨越多个自然行,我们可以利用这个规则规避反斜杠;
Expressions in parentheses, square brackets or curly braces can be split over more than one physical line without using backslashes.
# Example 1
content = ('I want say something directly.'
'But it is too long!')
print (content)
def IsTime(year = 1900, month = 1, day = 1,
hour = 0, minute = 0, second = 0):
if (1900 < year < 2100
and 1 <= month <= 12
and 1 <= day <= 31
and 0 <= hour < 24
and 0 <= minute < 60
and 0 <= second < 60):
return 1
2. 括号
上一个Item谈到括号可以进行自然行的连接,但是请不要强行在条件或者返回语句中使用括号,即便语义上没有问题,如:
# Example 2
if (year == 1990):
print("90's")
3. 缩进
请不要使用在Python代码中使用<tab>
,不仅仅是因为Indent会导致语法错误,甚至说在某些编辑器里面,当tab现实的长度不与你认为的4 space对等时,会出现无法预料的结果;
另外,对于换行的语句,请做到悬挂式缩进,如Example 1
中所示。
4. 空行
为了增加代码的可读性,建议使用空行来区分不同的定义。
# Example 3
class ExampleClass(object):
publicValue = 1
_privateValue = 0
def __init__(self, pub, pri):
publicValue = pub
_privateValue = pri
def getPublic(self):
return publicValue
def getPrivate(self):
return privateValue
5. 空格
主要注意几点:
- 在语法分隔符后面加空格,行末除外
- 在运算符两端加空格,参数值除外
- 紧邻括号不应空格
- 不要用空格对齐注释,注重美观会导致极大的维护成本
#Example 4
dict['key'] = list[idx] # not dict [ 'key' ] = list [ idx ]
spam(1) # not spam (1)
def complex(real, imag=0.0): return magic(r=real, i=imag) # not def complex(real, imag= 0.0): return magic(r = real, i = imag)
6. #!
主要在直接运行的Python文件头部声明文件信息:
#!/usr/bin/python2
#!coding : utf8
7. 注释
请多多使用注释,利好你的合作伙伴和以后的你。
8. 类
对于没有任何基类的类来说,从object
显示继承可以使你的类实现系统默认一些语义而不受兼容性的影响。
9. 字符串
在Python里面,字符串是一个不可以写的内建对象,因而我们在以下几种情况下加法运算,否则使用其他方案来进行代替:
# Example 5
x = a + b # not x = '%s%s' (a, b) or x = '{}{}'.format(a, b)
#otherwise
x = '%s is not in %s' % (a, b)
x = '{} is not in {}'.format(a, b)
arr = []
for r in rows:
arr.append(r['title'])
titles = ','.join(arr)
'''
not use like this:
titles = ""
count = 0
for r in rows:
if count = 0:
titles = r['title']
else:
titles += ',' + r['title']
'''
10. FD(File Description)
在使用到系统资源时,请显示的释放。建议在使用到系统资源的时候,使用with
来进行自动管理。with
语句实际上是一个外覆器,实现了一个try...except...finally
的过程。
with
的内容获取内容管理器- 加载
__exit__()
函数 - 调用
__enter__()
函数 - 如果说
with
后面有as
语句,那么把返回值传递给as
指向的target
- 执行语句
- 执行
__exit__()
函数 - finally`负责资源释放
11. TODO/FIX ME/XXX
标志未来需要添加或者修改的代码注释非常必要。
12. import
请给每个导入的模块一个单独行,不要吝啬
13. 封装
请尽量使用接口和私有变量来控制你模块中的类
14. 使用if __name__ == '__main__'
将程序的入口放在一个函数中,防止模块中的代码被执行。
# Example 6
def main():
...
if __name__ == '__main__':
main()