Menu

Python 注释:单行注释、多行注释与文档字符串

如何在 Python 中写注释:用 # 写单行注释、多行注释块,以及用文档字符串(docstring)为函数和模块写说明。

本页包含可运行的编辑器。编辑、运行,立即查看输出。

注释是写给人看的

Python 会忽略注释,这就是全部的诀窍。你标记为注释的任何内容,解释器都看不见。它纯粹是写给读代码的人看的,而这个人通常就是六个月后的你,正纳闷当初的自己在想什么。

话虽如此,只是复述代码明显在做什么的注释,不值得写。最好的注释解释的是为什么:某个限制、某个变通办法、某个无法从代码本身看出来的决定。代码本身已经告诉你它在做什么了。

用 # 写单行注释

基本形式是一个 #,后面跟着你的说明:

你也可以在一行代码的末尾加一条简短的注释。按照惯例,# 前面至少留两个空格:

Python 会把字符串之外任意位置的 # 之后的内容当作注释。“字符串之外”这一点很重要:引号里的 # 只是一个普通字符。

字符串里的 #section-2 是 URL 的一部分。只有字符串结束之后的那个 #,才会让 Python 进入“注释”模式。

注释多行代码

Python 没有 /* */ 这样的块注释。要跳过多行,就在每一行开头加上 #:

这些 # 你几乎从来不需要手动输入。每个像样的编辑器都有“切换行注释”的快捷键,可以给所有选中的行加上或去掉 #:

  • VS Code:Cmd + /(macOS)或 Ctrl + /(Windows/Linux)
  • PyCharm:Cmd + / 或 Ctrl + /
  • Vim:取决于你的插件;vim-commentary 用 gcc 注释单行,用 gc 注释选中的内容。

在你的编辑器里把快捷键学会一次,“先把这段注释掉试试别的”就变成了一键操作。

三引号字符串技巧(以及为什么它不是真正的注释)

你有时会看到这样的代码:

严格来说,这是一个会被丢弃的字符串表达式。Python 会解析它、求值,然后把结果扔掉。它表现得像注释,但并不是注释。从代码风格来看,只有在一个特定的地方这样写才合适:作为文档字符串。

文档字符串:三引号唯一该出现的地方

文档字符串(docstring)是放在函数、类或模块中第一条语句位置的三引号字符串。Python 会把它识别为文档,并在运行时通过 help() 函数和 __doc__ 属性提供出来:

文档字符串有两个好处:

  1. IDE、help() 和文档生成器等工具会自动读取它们。写在函数上方的注释可没有这种待遇。
  2. 它们在调用处说明函数的用途:当有人在编辑器里把鼠标悬停在 discount(...) 上时,文档字符串会作为提示弹出来。

关于文档字符串里写什么,有一个约定(PEP 257):第一行是一句话的概述,然后空一行,如果需要再写更详细的说明。刚开始不用太纠结具体格式,简单的一行说明也比完全没有文档字符串好得多。

好的注释应该写什么

几条能为你省去很多麻烦的建议:

  • 多写为什么,少写是什么。# Loop over the users 是废话;# Retry on 503 - Redis sometimes dies mid-deploy 才有价值。
  • 修改代码时同步更新注释。错误的注释比没有注释更糟。过时的注释会误导以后读代码的人。
  • 不要把注释掉的代码留在那里。不需要的代码就删掉,版本控制会帮你记着。到处是被注释掉的代码块的文件,很快就会让人不敢相信。
  • 跳过显而易见的内容。x = x + 1 # increment x 没有任何价值。

总结

注释写起来不花什么功夫,不写也没什么损失。当你要留下一条读者会感谢你的说明时,就写注释:某段代码能正常工作的微妙原因、一个 issue 的链接、对某个边界情况的提醒。定义函数或类时,使用文档字符串。其他时候,就让清晰的命名和短小的函数来说话。

现在你已经掌握了阅读和编写 Python 文件所需的一切。下一章,这门语言才真正开始做事:变量、数据类型,以及 Python 能存放的各种值。

常见问题

Python 中如何写注释?

在一行的开头(或行中任意位置)加上 #,这一行 # 之后的所有内容都是注释。Python 运行代码时会完全忽略注释。

Python 中如何注释多行代码?

Python 没有专门的多行注释语法。在每一行想跳过的代码开头加上 # 即可。大多数编辑器都有快捷键,可以一次性给所有选中的行加上或去掉 #,比如 VS Code 中的 Cmd/Ctrl + /。

Python 中的三引号字符串是注释吗?

不完全是。没有赋值给任何变量的三引号字符串在运行时表现得像注释,但 Python 仍然会把它当作字符串来解析。这种写法主要用于文档字符串(docstring),也就是函数、类和模块的说明文档,而不是普通的注释。

Coddy 编程语言插图

和 Coddy 一起学编程

开始