代码布局
缩进
- 每级缩进用4个空格。
- 括号中使用垂直隐式缩进或使用悬挂缩进。
EXAMPLE:
错误示范:
最大行宽
- 每行最大行宽不超过 79 个字符
- 一般续行可使用反斜杠
- 括号内续行不需要使用反斜杠
EXAMPLE:
空行
- 两行空行用于分割顶层函数和类的定义
- 单个空行用于分割类定义中的方法
EXAMPLE:
模块导入
- 导入的每个模块应该单独成行
- 导入顺序如下: (各模块类型导入之间要有空行分割,各组里面的模块的顺序按模块首字母自上而下升序排列)
EXAMPLE:
错误示例:
字符串
- 单引号和双引号作用是一样的,但必须保证成对存在,不能夹杂使用.
(建议句子使用双引号, 单词使用单引号, 但不强制.)
EXAMPLE:
表达式和语句中的空格
EXAMPLE:
spam(ham[1], {eggs: 2})
错误示例:
spam( ham[ 1 ], { eggs: 2 } )
if x == 4: print x, y; x, y = y, x
错误示例:
if x == 4 : print x , y ; x , y = y , x
EXAMPLE:
spam(1)
dct[‘key‘] = lst[index]
错误示例:
spam (1)
dct [‘key‘] = lst [index]
EXAMPLE:
x = 1
y = 2
long_variable = 3
错误示例:
x = 1
y = 2
long_variable = 3
- 二元运算符两边放置一个空格
- 涉及 = 的复合操作符 ( += , -=等)
- 比较操作符 ( == , < , > , != , <> , <= , >= , in , not in , is , is not )
- 逻辑操作符( and , or , not )
EXAMPLE:
a = b
a or b
注释
- 注释块
注释块通常应用在代码前,并和代码有同样的缩进。每行以 ‘# ’ 开头, 而且#后面有单个空格。
EXAMPLE:
EXAMPLE:
x = x + 1
EXAMPLE:
命名规则
class MyClass(object):
pass
- 全局变量名:
全局变量名应尽量只在模块内部使用, 对可能使用语句 from moduleName import variableName
而被导入的模块,应采用 __all__
机制来防止全局变量被别的模块导入, 或者在全局变量名开头加一个前置下划线.
EXAMPLE:
_name = ‘name‘
EXAMPLE:
vcenter_connection = ‘‘
- 常量名
常量全部使用大写字母的凹驼峰规则来表示, 通常在模块顶格定义
EXAMPLE:
MAX_OVERFLOW = ‘‘
TOTAL = 1
- 方法名和实例变量
- 非公开方法和实例变量开头使用前置下划线
- 有时候可能会为了避免与子类命名冲突,采用两个前置下划线
需要注意的是: 若 class Foo 的属性名为 __a
, 该属性是不能以 Foo.__a
的方式访问的(执著的用户还是可以通过Foo._Foo__a
来访问), 所以通常双前置下划线仅被用来避免与基类的属性发生命名冲突。
编程建议
EXAMPLE:
- 使用函数定义关键字 def 代替 lambda 赋值给标识符, 这样更适合于回调和字符串表示
-
异常类应该继承自Exception,而不是 BaseException
-
Python 2 中用raise ValueError(‘message‘)
代替 raise ValueError, ‘message‘
-
(考虑兼容python3和续行的方便性)
-
捕获异常时尽量指明具体异常, 尽量不用 except Exception
, 应该捕获 出了什么问题,而不是 问题发生
EXAMPLE:
- try/except 子句中的代码要尽可能的少, 以免屏蔽掉其他的错误
EXAMPLE:
EXAMPLE:
- 使用
isinstance()
代替对象类型的比较
EXAMPLE: