Python 命名规范
module_name
, package_name
, ClassName
, method_name
, ExceptionName
, function_name
, GLOBAL_CONSTANT_NAME
, global_var_name
, instance_var_name
, function_parameter_name
, local_var_name
.
总则
函数名、变量名和文件名应该是描述性的,并避免缩写。尤其注意不要使用有歧义或不常见的缩写,也不要通过删除单词内的字母来缩写。使用.py
扩展名,切忌使用连字符(-
)。
Python 之父推荐的规范
Type | Public | Internal |
---|---|---|
Packages | lower_with_under |
|
Modules | lower_with_under |
_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 | lower_with_under |
_lower_with_under (protected) |
Method Names | lower_with_under() |
_lower_with_under() (protected) |
Function/Method Parameters | lower_with_under |
|
Local Variables | lower_with_under |
Google 推荐风格的英文原文
Function names, variable names, and filenames should be descriptive; eschew abbreviation. In particular, do not use abbreviations that are ambiguous or unfamiliar to readers outside your project, and do not abbreviate by deleting letters within a word.
Always use a .py
filename extension. Never use dashes.
Names to Avoid
single character names, except for specifically allowed cases:
- counters or iterators (e.g.
i
,j
,k
,v
, et al.) e
as an exception identifier intry/except
statements.f
as a file handle inwith
statements
Please be mindful not to abuse single-character naming. Generally speaking, descriptiveness should be proportional to the name’s scope of visibility. For example,
i
might be a fine name for 5-line code block but within multiple nested scopes, it is likely too vague.- counters or iterators (e.g.
dashes (
-
) in any package/module name__double_leading_and_trailing_underscore__
names (reserved by Python)offensive terms
names that needlessly include the type of the variable (for example:
id_to_name_dict
)
Naming Conventions
“Internal” means internal to a module, or protected or private within a class.
Prepending a single underscore (
_
) has some support for protecting module variables and functions (linters will flag protected member access). While prepending a double underscore (__
aka “dunder”) to an instance variable or method effectively makes the variable or method private to its class (using name mangling); we discourage its use as it impacts readability and testability, and isn’t really private.Place related classes and top-level functions together in a module. Unlike Java, there is no need to limit yourself to one class per module.
Use CapWords for class names, but lower_with_under.py for module names. Although there are some old modules named CapWords.py, this is now discouraged because it’s confusing when the module happens to be named after a class. (“wait – did I write
import StringIO
orfrom StringIO import StringIO
?”)Underscores may appear in unittest method names starting with
test
to separate logical components of the name, even if those components use CapWords. One possible pattern istest<MethodUnderTest>_<state>
; for exampletestPop_EmptyStack
is okay. There is no One Correct Way to name test methods.
File Naming
Python filenames must have a .py
extension and must not contain dashes (-
). This allows them to be imported and unittested. If you want an executable to be accessible without the extension, use a symbolic link or a simple bash wrapper containing exec "$0.py" "$@"
.
Mathematical Notation
For mathematically heavy code, short variable names that would otherwise violate the style guide are preferred when they match established notation in a reference paper or algorithm. When doing so, reference the source of all naming conventions in a comment or docstring or, if the source is not accessible, clearly document the naming conventions. Prefer PEP8-compliant descriptive_names
for public APIs, which are much more likely to be encountered out of context.