Google Python Style Guide学习笔记
2019-08-25 本文已影响0人
仰望星空的小狗
最近发现一些规范的工作习惯真的太重要了,而规范的编码习惯对于程序员来说又是非常必要的,因此,对Google Python Style Guide进行学习并做一下笔记。
pylint工具
pylint是一个好用的用于给python进行打分的工具,能够查找错误和代码风格问题。通过以下指令即可对py代码进行评分
pylint test.py
导入import
在导入整个模块的时候,可以根据情况使用以下方法
import x # 导入整个x模块
from x import y # 导入x中的y
from x import y as z # 当可能有多个导入模块重名时,可以给导入的模块取一个别名z
from x.y import z # 当需要导入自己开发的一些模块的时候
捕获异常
在代码中,总会遇到各种异常,我们也需要对各种异常进行针对性的处理,而不应该仅仅是对所有异常进行统一一个方式处理。如
# YES 应该通过不同的except进行处理
try:
a = [0,1,2]
b = a[3]
a = 2/0
except IndexError as i:
print i
print 'indexerror'
except ZeroDivisionError as z:
print z
print 'ZeroDivisionError'
except Exception as e:
print e
# NO 不应该直接对所有的错误使用一个方式处理
try:
a = [0,1,2]
b = a[3]
a = 2/0
except Exception as e:
print e
另外,建议使用raise抛出异常,而不是使用assert断言。因为raise可以指定排除哪种异常,这样可以在上一级代码中进行相应的处理,而使用断言的话,可能就直接退出程序了。如
# Yes
def test(b):
if not b:
raise ValueError('抛出ValueError异常')
test(False)
# No
def test(b):
assert b, '无法指定异常为ValueError'
test(False)
迭代器操作
在遍历的时候,尽量使用迭代器操作。如
# Yes
for key in adict: ...
if key not in adict: ...
if obj in alist: ...
for line in afile: ...
for k, v in adict.items(): ...
for k, v in six.iteritems(adict): ...
# No
for key in adict.keys(): ...
if not adict.has_key(key): ...
for line in afile.readlines(): ...
for k, v in dict.iteritems(): ...
函数默认值的设置
在定义函数的时候,经常需要设置一些默认值,但是建议在函数内部中进行设置,这样可以在函数定义的时候省去生成相关初始值的操作。如
# YES
def foo(a, b=None):
if b is None:
b = []
# NO
def foo(a, b=[]):
...
读取文件
在进行文件读取的时候,尽量使用with(),尽量少使用open/close方式,因为很可能在open之后close之前代码出现异常而停止,这样之前打开的文件就没有close,可能会对文件的内容造成影响
# YES
with open(file_name, 'r') as f:
for line in f:
...
# NO
f = open(file_name, 'r')
...
f.close()