Python注释怎么写:单行#与多行三引号用法详解

向北走
向北走
发布时间:2026-10-29| 9人浏览过
原创

深入详解 Python 注释写法,涵盖单行井号(#)规范、多行三引号用法、函数类文档字符串(Docstring)标准、底层执行机制及工程最佳实践。

在 Python 编程实践中,清晰规范的注释是提升代码可读性与团队协作效率的基石。Python 官方语法层面的注释仅有一种形式,即以井号 # 开头的单行注释;而在社区与教程中常被当作“多行注释”使用的三引号 ''' 或 """,本质上是未被引用的多行字符串字面量(Docstring)。本文将从语法规范、底层编译机制、结构化文档规范(PEP 257)到工程最佳实践,全面解析两者的用法差异与选型准则。
Python注释怎么写:单行#与多行三引号用法详解
图 0:Python 单行注释与多行三引号文档字符串的核心分工与规范定位

一、单行注释(#)的用法与规范

在 Python 中,单行注释以字符 # 作为起始标记。从 # 开始直到该物理行末尾的所有字符,都会被 Python 词法分析器直接忽略。单行注释通常根据编写位置分为两类:独立块注释(Block Comments)与行尾内联注释(Inline Comments)。

1. 独立块注释的排版规则

独立块注释用于对后续的一整段代码、算法分支或业务流程进行逻辑说明。根据官方 PEP 8 样式指南,编写块注释时应遵循以下要求:

  • 同级缩进:注释行必须与它所解释的代码块保持完全相同的缩进层级。
  • 空格分隔:井号 # 后面必须跟一个英文半角空格,随后书写说明文字。
  • 段落拆分:若说明内容较长,应采用多行以 # 开头的句子,两个逻辑段之间可以使用仅含一个 # 的空注释行隔开。
# 计算订单应付总额
# 如果用户属于 VIP 会员且订单总额满 500 元,享受阶梯减免折上折
if is_vip and total_amount >= 500:
    discount = 0.85
    final_amount = total_amount * discount
else:
    final_amount = total_amount

2. 行尾内联注释的间距要求

行尾内联注释是指紧跟在代码语句同一行末尾的简短说明。内联注释若使用不当容易造成代码杂乱无章,PEP 8 对此做出了非常严格的空格限定:

  • 语句与 # 之间必须至少保留 2 个英文空格;
  • # 与注释正文之间必须保留 1 个英文空格;
  • 绝不编写无价值的显而易见废话(例如 x = 1 # 把 1 赋值给 x),只在代码本身无法自解释边界原因时添加。
server_port = 8080  # 内部网关监听端口,避开系统保留段
max_retries = 3     # 限制重试次数,防止雪崩效应
Python注释怎么写:单行#与多行三引号用法详解
图 1:单行注释(#)的 PEP 8 编写规范、空格准则与现代 IDE 调试工作流

二、多行注释与三引号(''' / """)的底层本质

很多从其他语言(如 C、Java 或 JavaScript)转到 Python 的开发者,会习惯性地寻找类似 /* ... */ 的多行注释语法。在 Python 中,官方并没有专门设计“块级注释闭合标记”,最地道的多行注释方式实际上是连续写多行以 # 开头的语句。

至于成对出现的单三引号 ''' 或双三引号 """,它们在 Python 语法体系中是合法的多行字符串字面量(Multi-line String Literals)。理解它们为什么能够被当成注释使用,关键在于 Python 解释器对孤立常量的编译机制:

底层原理剖析: 当 Python 解释器在编译代码时,如果遇到一个未赋值给变量、未作为参数传递给函数、且未放在对象首句的独立字符串常量,解释器生成的抽象语法树(AST)会将该表达式视为无副作用语句。在输出底层字节码(Bytecode)的过程中,编译器会触发常量优化,直接略过该对象。因此在运行期,它不会产生多余的内存开销,从而呈现出类似“注释”的效果。
Python注释怎么写:单行#与多行三引号用法详解
图 2:Python 词法分析与 AST 编译期对单行 # 注释与三引号多行字符串的处理机制对比

3. 临时调试屏蔽代码的陷阱与注意事项

在日常开发与排错过程中,开发者经常需要快速把十几行甚至上百行正在调试的代码屏蔽掉。此时直接使用成对的三引号将其包裹起来确实非常省事,但必须防范两个常见陷阱:

  • 嵌套字符串冲突:如果被屏蔽的代码块内部本身就包含了相同引号类型的字符串(例如包含了 """SQL语句"""),外部的三引号会提前与内部三引号配对闭合,造成严重的 SyntaxError 语法错误。
  • 缩进敏感陷阱:三引号包裹的内容作为多行字符串,必须符合当前作用域的缩进规则。如果把缩进不合规的代码直接包裹在循环体或函数内,依然可能触发 IndentationError。

三、三引号的真正使命:文档字符串(Docstring)规范

三引号在 Python 中的最高优先级用途不是替代普通注释,而是用来编写文档字符串(Docstring)。根据 PEP 257 规范,当多行字符串紧随在模块开头、类定义之后或函数签名定义之后时,它将被绑定为该对象的内置属性 __doc__。

1. 标准函数 Docstring 的解剖结构

一个符合工业级生产规范的 Docstring,通常具备高度严谨的层次结构。主要包含:

  1. 简要摘要行(Summary Line):用单行言简意赅地总结函数的核心功能,以动词开头,末尾带有句号。
  2. 空白间隔行:摘要行与后续详细解释之间必须有一行空行,否则文档生成工具无法正确分离标题与正文。
  3. 参数列表(Args):逐一列出参数名、数据类型预期及边界含义。
  4. 返回值(Returns):声明返回的数据类型及空值/特例场景说明。
  5. 异常抛出(Raises):明确标出该函数可能会主动抛出的异常类型及触发条件。
Python注释怎么写:单行#与多行三引号用法详解
图 3:符合 PEP 257 标准的 Python 函数文档字符串(Docstring)结构剖析与自动化生态

2. 在运行时调用与查看文档

编写良好的 Docstring 可以直接转化为 Python 的交互式在线帮助系统。在 Python 控制台或外部排查脚本中,你可以随时查看目标对象的帮助信息:

# 方法 1:通过内置属性直接获取原始字符串
print(fetch_user_profile.__doc__)

# 方法 2:使用内置 help() 函数获得格式化排版后的交互手册
help(fetch_user_profile)

四、对比与选择:单行 # 与三引号多行如何选?

为了避免在实际项目中出现“满屏散落未命名的三引号”或“文档写在非首句导致工具无法识别”的混乱现象,可以通过以下对比表格与决策树进行严格选型:

对比维度 单行注释(#) 三引号多行(''' 或 """)
语法地位 真正的语言级注释(Comment) 多行字符串字面量(String Literal)
解析器处理 词法分析阶段即被忽略丢弃 解析为 Token,根据位置保留为 Docstring 或作为独立常量被优化
内存占用 编译期与运行期完全 0 内存开销 作为 Docstring 时常驻内存;普通位置经编译器优化后不产生指令
推荐使用场景 解释算法内部意图、变量含义、代码分支原因及逻辑块背景 为模块、类、函数编写公开接口文档(Docstring);仅供临时大段排错
规范标准 PEP 8 样式指南 PEP 257 文档字符串规范
Python注释怎么写:单行#与多行三引号用法详解
图 4:Python 注释类型选择、业务场景匹配与工程最佳实践决策路径图

五、编写高质量 Python 注释的工程准则

在实际团队协作中,注释不仅关乎个人习惯,更直接影响代码仓库的维护成本。以下是业内普遍推崇的注释自律准则:

  • 保持注释与代码同步更新:最糟糕的注释不是不写注释,而是“代码已经重构修改,注释却保留了过去的逻辑”。过期的错误注释会带来严重的误导。
  • 优先重构自解释代码:如果一段代码的命名晦涩、逻辑杂乱,不要试图通过堆叠密密麻麻的注释来掩饰。先通过提取函数、优化变量命名让代码自解释,再对关键业务边界补充注释。
  • 聚焦“为什么”而非“怎么做”:代码本身已经清晰地展示了“如何实现”(How),注释应当聚焦于“为什么选择该方案”(Why)、背后的架构权衡、特例处理依据以及已知限制。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。