
本文总结 python 中模块级函数的命名规范,重点对比“带模块上下文”与“无模块上下文”两种命名策略,结合 pep 8 建议、可读性、可维护性及实际工程场景,给出清晰、可落地的命名指导。
本文总结 python 中模块级函数的命名规范,重点对比“带模块上下文”与“无模块上下文”两种命名策略,结合 pep 8 建议、可读性、可维护性及实际工程场景,给出清晰、可落地的命名指导。
在 Python 项目中,当多个模块(如 boat.py 和 car.py)提供语义相似的功能(如获取、创建、删除数据库对象)时,如何为模块级函数命名,直接影响代码的可读性、可维护性与协作效率。PEP 8 — Python 官方编码风格指南 — 虽未直接规定“函数是否应包含领域前缀”,但其核心原则——显式优于隐式、简单优于复杂、可读性至关重要——为决策提供了坚实依据。
✅ 推荐方案:模块名作为天然命名空间(import boat, car)
采用 import boat, import car 方式,并定义简洁动词型函数名(如 boat.get(), car.delete()),是更符合 Python 惯例的选择:
# boat.py
def get(id):
return _fetch_from_db("boat", id)
def delete(id):
return _delete_from_db("boat", id)
# car.py
def get(id):
return _fetch_from_db("car", id)
def delete(id):
return _delete_from_db("car", id)
# main.py import boat import car boat.get(123) # 清晰表明操作对象类型与来源 car.delete(456) # 无歧义,无需重复语义
✅ 优势:
- 显式且自解释:调用点即体现领域上下文(boat.get 不可能被误认为操作用户或订单);
- 避免命名冗余:get_boat 在 from boat import get_boat 场景下反而弱化了模块归属,且违反“函数名应描述行为而非主体”的直觉(get 本身已隐含“获取某物”,主体由模块承载);
- 兼容大规模扩展:新增 plane.py 时,仅需 import plane,无需重命名所有函数;
- 与标准库一致:如 json.loads()、pathlib.Path()、datetime.datetime.now() 均依赖模块/类作为逻辑命名空间,而非将类型嵌入函数名。
⚠️ 谨慎使用:前缀式命名(get_boat, delete_car)
该方式通常出现在 from module import * 或扁平化导入场景中:
# 不推荐:破坏模块边界,易引发冲突 from boat import get_boat, delete_boat from car import get_car, delete_car get_boat(123) # 函数名变长,语义重心偏移(强调“boat”而非“get”)
⚠️ 风险:
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
- 当模块功能增多(如 get_boat_by_owner, get_boat_by_status),前缀重复加剧,违背 DRY 原则;
- 一旦需统一抽象(例如增加通用 get_by_type(type_name, id)),前缀成为重构障碍;
- 违反 PEP 8 关于“imports should usually be on separate lines”和“avoid wildcard imports”的隐含精神——过度扁平化会削弱模块封装价值。
? 工程建议:平衡清晰性与便利性
默认采用模块导入:import boat, import car,函数命名聚焦动作(get, create, update, delete);
-
必要时使用别名提升可读性:
import boat as boat_api import car as car_api boat_api.get(123) # 显式标注用途,适合大型项目或 API 层
-
共享逻辑请提取抽象层:若 boat 与 car 的 CRUD 行为高度一致,应优先考虑基类、协议(Protocol)或工具函数,而非复制函数命名模式:
# common/db.py def get_by_model(model_name: str, id: int): return _fetch_from_db(model_name, id) # boat.py def get(id): return db.get_by_model("boat", id)
✅ 总结
模块是 Python 最自然、最受支持的命名空间。让模块名承载领域信息,让函数名专注表达行为——这是最 Pythonic、最可持续的模块级函数命名方式。 避免将类型名硬编码进函数标识符,除非有强约束(如必须单模块内多类型共存且无法拆分)。始终以 PEP 8 的“可读性”和“显式性”为标尺,而非短期导入便利。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










