最近在做一个团队合作的算法开发项目时,作者发现自己的原先的 Python 代码编写习惯存在一些不合规范的地方,特此记录。
【参考资料】
1.谷歌开源项目风格指南 - Python风格规范
【推荐阅读】
1.作者的个人网站
1 缩进
使用四个空格,不能习惯用 Tab
2 空格
2.1 在二元操作符两边都加上一个空格
比如
- 赋值(=)
- 比较(==, <, >, !=, <>, <=, >=, in, not in, is, is not)
- 布尔(and, or, not)
至于算术操作符两边的空格该如何使用, 可自行判断. 不过两侧务必要保持一致
2.2 当等号(=)用于指示关键字参数或默认参数值时, 不要在其两侧使用空格
例如,
def complex(real, imag=0.0):
return magic(r=real, i=imag)
2.3 不要用空格来垂直对齐多行间的标记, 因为这会成为维护的负担(适用于:, #, =等)
错误案例,
foo = 1000 # comment
long_name = 2 # comment that should not be aligned
dictionary = {
"foo" : 1,
"long_name": 2,
}
“以你为你加了空格对齐后的代码很帅?哎~不存在的” —— 芜湖大司马
3 注释
3.1 注释应该至少离开代码2个空格, 以提高可读性
3.2 绝对不要描述代码, 而应假设阅读代码的人比你更懂Python, 他只是不知道你的代码要做什么
其他详见 谷歌开源项目风格指南 - Python风格规范 - 注释
4 类
如果一个类不继承自其它类, 就显式的从object继承. 嵌套类也一样.
例如,
class SampleClass(object):
pass
class OuterClass(object):
class InnerClass(object):
pass
class ChildClass(ParentClass):
"""Explicitly inherits from another class already."""
5 命名
- 避免连字符(-)
- 用单下划线(_)开头表示模块变量或函数是protected的(使用from module import *时不会包含).
- 用双下划线(__)开头的实例变量或方法表示类内私有
- 对类名使用大写字母开头的单词(如CapWords, 即Pascal风格), 但是模块名应该用小写加下划线的方式(如lower_with_under.py)
规范命名示例
Type | Public | Internal |
---|---|---|
Modules | lower_with_under | _lower_with_under |
Packages | lower_with_under | |
Classes | CapWords | _CapWords |
Exceptions | CapWords | |
Functions | lower_with_under() | _lower_with_under() |
Global/Class Constants | CAPS_WITH_UNDER | _CAPS_WITH_UNDER |
Global/Class Variables | lower_with_under | _lower_with_under |
Instance Variables | ower_with_under | _lower_with_under (protected) or __lower_with_under (private) |
Method Names | lower_with_under() | _lower_with_under() (protected) or __lower_with_under() (private) |
Function/Method Parameters | lower_with_under | |
Local Variables | lower_with_under |