Python 编程规范与最佳实践。强制 PEP 8 代码风格、语法校验、单元测试执行,适用于代码编写、审查和重构。触发词:Python、代码规范、py_compile、单元测试。
Python 编码准则
功能概述
Python 编码准则是一项面向实际任务的技能,主要用于代码样式( PEP 8). 4 缩进空格( 绝不设标签).;Max 线长: 88 个字符( 黑色默认) 或 79( 严格 PEP 8);
核心要点
- 在顶级定义前有两个空白行, 1。
- 它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
- 使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。
使用与执行
该技能适合需要稳定复用相关能力的场景,可作为自动化工作流的一部分,也便于后续检查、调整和扩展。从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;
结果检查与注意事项
若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
Python 编码规范
代码风格(PEP 8)
- 使用 4 个空格进行缩进(禁止使用制表符)
- 单行最大长度:88 字符(Black 默认值)或 79 字符(严格遵循 PEP 8)
- 顶层定义前空两行,类内部方法间空一行
- 导入顺序:标准库 → 第三方库 → 本地模块;各组内按字母序排列
- 函数/变量名使用 snake_case,类名使用 PascalCase,常量名使用 UPPER_CASE
提交前检查
# 语法检查(必须执行) python -m py_compile *.py # 运行测试(若存在) python -m pytest tests/ -v 2>/dev/null || python -m unittest discover -v 2>/dev/null || echo "No tests found" # 格式检查(若已配置) ruff check . --fix 2>/dev/null || python -m black --check . 2>/dev/null
Python 版本要求
- 最低要求: Python 3.10+(Python 3.9 已于 2025 年 10 月结束生命周期)
- 推荐目标: 新项目应面向 Python 3.11–3.13
- 禁止使用 Python 2 的语法或模式
- 优先使用现代特性:match 语句、海象运算符(walrus operator)、类型提示(type hints)
依赖管理
优先检测并使用 uv,若不可用则回退至 pip:
# 若可用则优先使用 uv
if command -v uv &>/dev/null; then
uv pip install
uv pip compile requirements.in -o requirements.txt
else
pip install
fi
新项目使用 uv 初始化:uv init 或 uv venv && source .venv/bin/activate
Python 风格最佳实践
# ✅ 优先使用列表/字典推导式而非显式循环
squares = [x**2 for x in range(10)]
lookup = {item.id: item for item in items}
# ✅ 使用上下文管理器管理资源
with open("file.txt") as f:
data = f.read()
# ✅ 使用解包(unpacking)
first, *rest = items
a, b = b, a # 交换变量值
# ✅ 推崇 EAFP(Easier to Ask for Forgiveness than Permission)而非 LBYL(Look Before You Leap)
try:
value = d[key]
except KeyError:
value = default
# ✅ 使用 f-string 进行字符串格式化
msg = f"Hello {name}, you have {count} items"
# ✅ 添加类型提示
def process(items: list[str]) -> dict[str, int]:
...
# ✅ 使用 dataclasses 或 attrs 定义数据容器
from dataclasses import dataclass
@dataclass
class User:
name: str
email: str
active: bool = True
# ✅ 使用 pathlib 替代 os.path
from pathlib import Path
config = Path.home() / ".config" / "app.json"
# ✅ 合理使用 enumerate、zip 和 itertools
for i, item in enumerate(items):
...
for a, b in zip(list1, list2, strict=True):
...
应避免的反模式(Anti-patterns)
# ❌ 禁止使用可变对象作为默认参数
def bad(items=[]): # 错误:该列表在多次调用间共享
...
def good(items=None):
items = items or []
# ❌ 禁止裸 except(bare except)
try:
...
except: # 会捕获 SystemExit、KeyboardInterrupt 等不应拦截的异常
...
except Exception: # 更安全的做法
...
# ❌ 避免全局状态(Global state)
# ❌ 禁止使用 from module import *
# ❌ 避免在循环中拼接字符串(应使用 ''.join())
# ❌ 禁止使用 == None(应使用 `is None`)
# ❌ 禁止使用 len(x) == 0(应使用 `not x`)
测试
- 优先使用 pytest,也可选用 unittest
- 测试文件命名应为
test_*.py,测试函数命名应为test_* - 编写聚焦的单元测试,对外部依赖使用 mock
- 每次提交前均需运行:
python -m pytest -v
文档字符串(Docstrings)
def fetch_user(user_id: int, include_deleted: bool = False) -> User | None:
"""从数据库中根据 ID 获取用户。
Args:
user_id: 用户唯一标识符。
include_deleted: 若为 True,则包含软删除的用户。
Returns:
找到则返回 User 对象,否则返回 None。
Raises:
DatabaseError: 数据库连接失败时抛出。
"""
快速检查清单
- 语法有效(
py_compile) - 测试全部通过(
pytest) - 公共函数已添加类型提示
- 无硬编码密钥(hardcoded secrets)
- 使用 f-string,而非
.format()或%格式化 - 使用
pathlib处理文件路径 - I/O 操作使用上下文管理器
- 无可变默认参数
热门AI工具
相关专题
本专题围绕 Django REST Framework 展开,深入讲解 API 认证、JWT 鉴权、权限控制、接口安全防护以及防攻击策略设计。通过完整后端案例,帮助开发者构建安全可靠的 Web API 服务体系。
140
2026.06.29
本专题聚焦 Python FastAPI 框架在高性能接口与微服务开发中的应用,讲解异步请求处理、依赖注入机制、路由设计、数据库异步操作以及接口性能优化策略。结合实际项目案例,帮助开发者构建高并发、低延迟的现代化后端服务架构。
219
2026.06.16
聚焦Python在数据分析领域的核心应用,涵盖Pandas、NumPy、Matplotlib等库的使用技巧、真实业务场景案例及性能优化方法。
146
2026.06.04
以 Python 语言特性为基础,讲解经典设计模式的 Pythonic 实现方式,涵盖单例模式(模块级/元类/new)、工厂模式与注册表模式、策略模式(函数作为一等公民替代类继承)、观察者模式(信号与事件系统)、装饰器模式(语言原生支持)、代理模式(getattr 动态代理)、依赖注入(dependency-injector 库)、仓储模式(Repository Pattern)在数据层的应用,同时讲解 Python 项目的分层架构(领
424
2026.05.15
全面讲解 Python 应用的日志管理与监控方案,涵盖 logging 标准库的 Logger/Handler/Formatter/Filter 体系、日志级别规范与分模块配置、dictConfig / fileConfig 声明式配置、loguru 第三方库的简洁用法与结构化输出、日志轮转(RotatingFileHandler/TimedRotatingFileHandler)策略、JSON 格式结构化日志输出、ELK / Loki
186
2026.05.15
全面讲解 Python 中数据库操作的技术方案,涵盖 sqlite3 标准库的轻量数据库操作、PyMySQL / psycopg2 连接 MySQL / PostgreSQL、DB-API 2.0 规范与游标操作、SQL 注入防范与参数化查询、SQLAlchemy Core 表达式语言与 ORM 模型定义/查询/关联关系映射、Alembic 数据库迁移管理、连接池(SQLAlchemy Pool / DBUtils)配置与调优、异步数据
171
2026.05.11
以 FastAPI 为核心,讲解现代 Python Web API 的高效开发方式,涵盖路由定义与路径参数/查询参数/请求体绑定、Pydantic 模型的数据校验与序列化、依赖注入(Depends)系统的分层设计、中间件与 CORS 配置、OAuth2 + JWT 认证流程、后台任务(BackgroundTasks)、WebSocket 实时通信、SQLAlchemy 异步 ORM 集成、自动生成 OpenAPI/Swagger 交互文
316
2026.05.09
系统讲解 Python 的并发与并行编程体系,涵盖 GIL 全局解释器锁的原理与影响分析、threading 模块的线程创建/锁/事件/信号量、multiprocessing 模块的进程创建/进程间通信(Queue/Pipe/共享内存)、concurrent.futures 线程池与进程池的统一接口、I/O 密集型与 CPU 密集型任务的方案选择、多线程竞态条件排查与线程安全数据结构、subprocess 子进程管理,帮助开发者根据任务
114
2026.05.08
热门下载
相关下载
精品课程
最新文章
