[Python 基础课程]Python 规范
先了解下,后面会一直强调 Python 编程的规范。
代码布局 (Code Layout)
缩进 (Indentation): 使用 4 个空格进行缩进。不要混合使用制表符和空格。
行宽 (Maximum Line Length): 每行代码的长度应限制在 79 个字符以内。对于较长的注释或文档字符串,可以放宽到 72 个字符。
空行 (Blank Lines):
- 顶层函数和类定义之间空两行。
- 类的方法定义之间空一行。
- 在函数内部,可以使用空行来分隔逻辑相关的代码块,以提高可读性。
模块导入 (Imports):
- 每个导入通常应该独占一行。
- 导入应该按照以下顺序分组,并在每组之间留一个空行:标准库导入 (e.g., import os),第三方库导入 (e.g., import requests),本地应用程序/库的导入 (e.g., from my_package import my_module)。
- 避免使用 from import *,因为它会使命名空间混乱。
命名约定 (Naming Conventions)
变量名 (Variable Names): 使用 小写字母,单词之间用下划线分隔 (snake_case)。例如:user_name, total_count.
函数名 (Function Names): 使用 小写字母,单词之间用下划线分隔 (snake_case)。例如:calculate_average(), get_user_data().
类名 (Class Names): 使用 驼峰命名法 (CamelCase),每个单词的首字母大写。例如:UserProfile, DataProcessor.
模块名和包名 (Module and Package Names): 使用 小写字母,单词之间用下划线分隔 (snake_case)。例如:my_module.py, data_utils/.
常量 (Constants): 使用 大写字母,单词之间用下划线分隔 (UPPER_CASE)。例如:MAX_USERS, DEFAULT_TIMEOUT.
受保护的成员 (Protected Members): 类中以单下划线开头的成员 (例如 _internal_variable, _internal_method) 应该被视为内部实现细节,不建议在类外部直接访问。
私有成员 (Private Members): 类中以双下划线开头的成员 (例如 __private_variable, __private_method) 会触发名称改写 (name mangling),使其更难在类外部直接访问。这是一种更强的私有性约定。
表达式和语句 (Expressions and Statements)
空格 (Whitespace in Expressions):
- 在二元运算符两边各加一个空格:i = i + 1, x < y
- 在逗号、分号后面加一个空格:[1, 2, 3], function(a, b)
- 在函数调用的参数列表中,逗号后面加空格
- 不要在括号 (圆括号、方括号、花括号) 内部的旁边直接加空格:spam(ham[1], {eggs: 2}) (不是 spam( ham[ 1 ], { eggs: 2 } )).
- 不要在尾部的逗号后面加空格。
行尾注释 (Trailing Commas): 在多行结构(如列表、元组、字典的定义)的最后一个元素后面添加一个逗号是允许的,有时甚至推荐,因为它使得添加或删除元素更加方便,并且可以减少版本控制系统中的差异。
语句块 (Statements): 每个语句通常应该独占一行。
注释 (Comments)
行内注释 (Inline Comments): 指与代码语句位于同一行的注释,通常用于解释单行代码的用途或逻辑。它们以 <font style="color:rgb(64, 64, 64);background-color:rgb(236, 236, 236);">#</font>
符号开头,其后的内容会被 Python 解释器忽略。
x = x + 1 # 计数器自增
文档字符串 (Docstrings - PEP 257):
- 所有公共模块、类、函数和方法都应该编写文档字符串。
- 文档字符串应该清晰地描述对象的功能、参数、返回值、可能引发的异常等。
- 单行文档字符串应该简洁地总结对象的作用。
- 多行文档字符串应该以一个总结行开始,空一行后跟更详细的描述。
def quadratic(a, b, c):"""解二次方程 ax² + bx + c = 0参数:a (float): x²系数b (float): x系数c (float): 常数项返回:tuple: 实数解的元组 (若无解返回空元组)"""discriminant = b**2 - 4*a*c# ...计算逻辑...