Python 命名规范大全 | Google 官方 PEP-8 速查表
命名
Tip
模块名:module_name
;
包名:package_name
;
类名:ClassName
;
方法名:method_name
;
异常名:ExceptionName
;
函数名:function_name
,query_proper_noun_for_thing
,send_acronym_via_https
;
全局常量名:GLOBAL_CONSTANT_NAME
;
全局变量名:global_var_name
;
实例名:instance_var_name
;
函数参数名:function_parameter_name
;
局部变量名:local_var_name
。
函数名、变量名和文件名应该是描述性的,避免缩写。特别要避免那些对于项目之外的人有歧义或不熟悉的缩写,也不要通过省略单词中的字母来进行缩写。
必须用 .py
作为文件后缀名。不要用连字符。
需要避免的名称
-
只有单个字符的名称,除了以下特别批准的情况:
- 计数器和迭代器(例如,
i
,j
,k
,v
等等)。 - 在
try/except
语句中代表异常的e
。 - 在
with
语句中代表文件句柄的f
。 - 私有的、没有约束(constrain)的类型变量(type variable,例如
_T = TypeVar("_T")
,_P = ParamSpec("_P")
)。
- 计数器和迭代器(例如,
-
包含连字符(
-
) 的包名/模块名。 -
首尾均为双下划线的名称,例如
__double_leading_and_trailing_underscore__
(此类名称是 Python 的保留名称)。 -
包含冒犯性词语的名称。
- 在不必要的情况下包含变量类型的名称(例如
id_to_name_dict
)。
命名规范
- “内部(Internal)”一词表示仅在模块内可用,或者在类内是受保护/私有的。
- 在一定程度上,在名称前加单下划线(
_
)可以保护模块变量和函数(格式检查器会对受保护的成员访问操作发出警告)。 - 在实例的变量或方法名称前加双下划线(
__
,又名为 dunder)可以有效地把变量或方法变成类的私有成员(基于名称修饰 name mangling 机制)。我们不鼓励这种用法,因为这会严重影响可读性和可测试性,而且没有 真正 实现私有。建议使用单下划线。 - 应该把相关的类和顶级函数放在同一个模块里。与 Java 不同,不必限制一个模块只有一个类。
- 类名应该使用首字母大写的形式(如 CapWords),但是模块名应该用小写加下划线的形式(如
lower_with_under.py
)。尽管有些旧的模块使用类似于CapWords.py
这样的形式,现在我们不再鼓励这种命名方式,因为模块名和类名相同时会让人困惑(“等等,我刚刚写的是import StringIO
还是from StringIO import StringIO
?”)。 - 新的 单元测试 文件应该遵守 PEP 8,用小写加下划线格式的方法名,例如
test_<被测试的方法名>_<状态>
。有些老旧的模块有形如CapWords
这样大写的方法名,为了保持风格一致,可以在 test 这个词和方法名之后,用下划线分割名称中不同的逻辑成分。比如一种可行的格式之一是test<被测试的方法>_<状态>
。
文件名
所有 Python 文件名都应该以 .py
为文件后缀且不能包含连字符(-
)。这样便于导入这些文件并编写单元测试。如果想通过不含后缀的命令运行程序,可以使用软链接文件(symbolic link)或者 exec "$0.py" "$@"
这样简单的 bash 脚本。
根据 Python 之父 Guido 的建议所制定的规范
类型 | 公有 | 内部 |
---|---|---|
包 | 小写下划线 | - |
模块 | 小写下划线 | 下划线+小写下划线 |
类 | 大驼峰 | 下划线+大驼峰 |
异常 | 大驼峰 | - |
函数 | 小写下划线 | 下划线+小写下划线 |
全局常量/类常量 | 大写下划线 | 下划线+大写下划线 |
全局变量/类变量 | 小写下划线 | 下划线+小写下划线 |
实例变量 | 小写下划线 | 下划线+小写下划线(受保护) |
方法名 | 小写下划线 | 下划线+小写下划线(受保护) |
函数参数/方法参数 | 小写下划线 | - |
局部变量 | 小写下划线 | - |
例子
类型 | 公有 | 内部 |
---|---|---|
包 | lower_with_under |
- |
模块 | lower_with_under |
_lower_with_under |
类 | CapWords |
_CapWords |
异常 | CapWords |
- |
函数 | lower_with_under() |
_lower_with_under() |
全局常量/类常量 | CAPS_WITH_UNDER |
_CAPS_WITH_UNDER |
全局变量/类变量 | lower_with_under |
_lower_with_under |
实例变量 | lower_with_under |
_lower_with_under |
方法名 | lower_with_under() |
_lower_with_under() |
函数参数/方法参数 | lower_with_under |
- |
局部变量 | lower_with_under |
- |
数学符号
对于涉及大量数学内容的代码,如果相关论文或算法中有对应的符号,则可以忽略以上命名规范并使用较短的变量名。若要采用这种方法,应该在注释或者文档字符串中注明你所使用的命名规范的来源。如果原文无法访问,则应该在文档中清楚地记录命名规范。建议公开的 API 使用符合 PEP8 的、描述性的名称,因为使用 API 的代码很可能缺少相关的上下文信息。
更多建议: