Lint
流程控制
# Yes!if x is not y# No!if not x is y
导入
包
绝对路径导入模块
# Yesimport sound.effects.echofrom sound.effects import echo# No
异常
# Yesraise MyException("Error Message")raise MyException# Noraise MyException, 'Error Message'raise 'Error Message'
尽量减少try/except块中代码量。try中越多期望外的异常越多。
使用as而不是逗号
try:raise Errorexcept 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
