Python代码风格与格式化权威指南:从PEP8到自动化实践
一、PEP8核心规范精要
- 命名规范矩阵
| 标识符类型 |
规范格式 |
示例 |
例外情况 |
| 模块名 |
全小写下划线式 |
data_processor |
已有C扩展模块 |
| 类名 |
首字母大写的驼峰 |
DataValidator |
内部类可用下划线 |
| 函数/方法名 |
全小写下划线式 |
calculate_mean |
继承父类命名 |
| 常量名 |
全大写下划线式 |
MAX_RETRIES |
模块级变量 |
| 保护型属性 |
单下划线开头 |
_internal_cache |
子类可见属性 |
| 私有属性 |
双下划线开头 |
__secret_key |
名称修饰(mangling) |
| 类型变量 |
驼峰式+T后缀 |
AnyStrT |
PEP484类型提示 |
- 布局与格式规范
def complex_function(
param1: int,
param2: str,
*,
verbose: bool = False
) -> tuple:
"""函数文档字符串示例
Args:
param1: 整型参数描述
param2: 字符串参数描述
verbose: 控制详细输出
Returns:
包含处理结果的元组
"""
if verbose:
print(f"Processing {
param2}")
result = (param1 * 2, param2.upper())
return result
class badExample:
def __init__(self,a,b):
self.a =a
self.b= b
def Calculate(self):
return self.a+self.b
- 行长度与换行策略
result = (
some_long_calculation()
+ another_function()
- correction_factor
)
def process_data(
input_file: Path,
output_dir: Optional[Path] = None,
*,
chunk_size: int = 1024,
encoding: str = "utf-8"
) -> list[dict]:
二、Black格式化工具实战
- 基础配置与使用
$ pip install black
$ black .
$ black --line-length 120 --skip-string-normalization src/
$ black --check --diff .
- 配置文件示例(pyproject.toml)
[tool.black]
line-length = 100
target-version = ['py311']
include = '\.pyi?$'
exclude = '''
/(
\.git
| \.venv
| build
| dist
)/
'''
- 与预提交钩子集成
repos:
- repo: https://github.com/psf/black
rev: 23.3.0
hooks:
- id: black
args: [--config=./pyproject.toml]
- 特殊处理技巧
matrix = [
[1, 0, 0],
[0, 1, 0],
[0, 0, 1],
]
$ black --skip-string-normalization .
三、多工具集成方案
| 工具 |
功能定位 |
典型命令 |
配置文件 |
| Black |
不可逆格式化 |
black . |
pyproject.toml |
| isort |
导入排序 |
isort . |
.isort.cfg |
| flake8 |
静态检查 |
flake8 src/ |
.flake8 |
| mypy |
类型检查 |
mypy --strict . |
mypy.ini |
| pylint |
代码质量分析 |
pylint **/*.py |
.pylintrc |