Lint
流程控制
# Yes!
if x is not y
# No!
if not x is y
导入
包
绝对路径导入模块
# Yes
import sound.effects.echo
from sound.effects import echo
# No
异常
# Yes
raise MyException("Error Message")
raise MyException
# No
raise MyException, 'Error Message'
raise 'Error Message'
尽量减少try/except块中代码量。try中越多期望外的异常越多。
使用as而不是逗号
try:
raise Error
except Error as error:
pass
列表推导
避免使用特花哨特性
元类(metaclasses), 字节码访问, 任意编译(on-the-fly compilation), 动态继承, 对象父类重定义(object reparenting), 导入黑客(import hacks), 反射, 系统内修改(modification of system internals), 等等.
尽可能使用隐式false
if foo:
if not foo:
类
# 好
class Foo(Base):
def __init__(self):
super().__init__()
# 孬 菱形继承会调用爷爷类两次构造函数
class Foo(Base):
def __init__(self):
Base.__init__(self)
参考
https://www.python.org/dev/peps/pep-0008/
https://google.github.io/styleguide/pyguide.html