# 初始化服务客户端token = auth_service.get_token()client = ServiceClient(token=token)client.connect()# 获取并过滤数据data = client.fetch_all()filtered = [item for item in data if item.is_valid]
# ❌ 没有空行,代码像砖墙一样密集def process(numbers: list[int]) -> list[int]: result = [] for n in numbers: if n % 2 == 0: result.append(n * 2) else: result.append(n) total = sum(result) average = total / len(result) return result
python
# ✅ 适当的空行增加"呼吸感"def process(numbers: list[int]) -> list[int]: result = [] for n in numbers: if n % 2 == 0: result.append(n * 2) else: result.append(n) total = sum(result) average = total / len(result) return result
Python 注释与文档工程指南
Python 3.10+Documentation注释是代码非常重要的组成部分。它们不影响代码的实际行为,但直接影响代码的可读性和可维护性。优秀的注释能帮助读者快速理解代码意图,而糟糕的注释则会造成困惑甚至误导。
一、📝 注释基础知识 (Comment Fundamentals)
1.1 注释类型概览
Python 中有两种主要的注释形式:
# comment"""docstring"""__doc__)1.2 代码内注释 (#)
使用
#号的注释是最常见的形式:行内注释
行内注释放在语句末尾,与代码至少隔 2 个空格:
PEP 8 建议
行内注释应谨慎使用。如果注释只是在陈述显而易见的事情,它反而会分散注意力。
1.3 文档字符串 (Docstrings)
Docstring 是 Python 特有的文档机制(PEP 257),使用三引号包裹,放在模块、类或函数定义的第一行:
Docstring 在运行时可通过
__doc__属性访问:二、🚫 注释的常见错误 (Common Mistakes)
2.1 用注释屏蔽代码
反模式:把注释当作临时屏蔽代码的工具:
问题:这些"僵尸代码"对阅读者毫无意义,只会造成干扰。
解决方案:直接删除不需要的代码。如果未来需要,可以从 Git 历史中找回——这正是版本控制系统存在的意义。
2.2 用注释复述代码
反模式:注释只是重复代码本身做了什么:
问题:读者从代码本身就能获取这些信息,注释毫无价值。
好的注释应该解释"为什么":
2.3 指引性注释 vs 提炼函数
指引性注释简明扼要地概括代码功能,起到"代码导读"的作用:
但需要判断:何时该写注释,何时该提炼为独立函数?
上面的代码可以重构为:
有意义的函数名已经达到了概括和指引的作用。
权衡原则
2.4 弄错 Docstring 的受众
反模式:在 Docstring 中过多阐述实现细节:
问题:Docstring 是给使用者看的,不是给维护者看的。
正确写法:
实现细节可以放在函数内部的代码注释中。
三、📋 Docstring 规范 (Docstring Standards)
PEP 257 定义了 Docstring 的基本规范。在此基础上,社区发展出了多种流行风格。
3.1 三种主流风格对比
Google Style(推荐)
简洁易读,适合大多数项目:
Sphinx/reST Style
与 Sphinx 文档生成器原生兼容:
NumPy Style
常用于科学计算库:
3.2 风格选择建议
Sphinx + Napoleon
如果你使用 Google Style 但需要 Sphinx 生成文档,可以启用
sphinx.ext.napoleon扩展,它会自动将 Google Style 转换为 reST 格式。3.3 Docstring 内容要点
一份完整的 Docstring 应包含:
四、🎯 文档驱动设计 (Documentation-Driven Design)
4.1 先写注释,后写代码
这是一个值得推广的工程习惯:将 Docstring 作为设计工具。
4.2 示例
假如你准备实现一个
process_order()函数。在写 Docstring 时,你发现需要描述:这说明
process_order()承担了太多职责。解决办法是拆分为多个单一职责的函数:4.3 避免遗漏 Docstring
程序员常常跳过 Docstring 直接写代码。写完后对函数失去兴趣,不愿回头补文档。
解决方案:遵守"先写注释,后写代码"的习惯——在写出有说服力的 Docstring 前,不写任何函数代码。
五、📐 空行也是"注释" (Whitespace as Documentation)
代码里的"注释"不只是描述性文字。空行也是一种特殊的视觉组织工具。
5.1 无空行 vs 有空行
5.2 PEP 8 空行规范
六、🔧 Docstring 与类型注解的关系
6.1 互补而非替代
类型注解提供机器可读的类型信息:
Docstring提供人类可读的语义信息:
6.2 最佳实践
七、✅ 最佳实践清单 (Checklist)
八、📚 延伸阅读
← 返回 Python 深度研究