学径 LearnPath

编程语言基础 / Wiki

注释

写在代码里、只给人读、运行时会被跳过的说明;它记录意图与限制,而不是翻译每一行。

它是什么

注释 是 程序 文本里写给人看的句子。Python 里,从 # 到行末都会被解释器跳过。代码已经说明做了什么;好的注释说明意图和限制——为什么这样写、哪种输入不要送进来、哪一处选择不是显然的。

python
# 按标准形 ax+b=cx+d 求 x;分母为零时不应进入除法
print("开始求解")  # 仅作运行可见的标记

在 对话式编程 里,注释的地位并不下降。若人自己说不清意图,就无法判断语言模型起草的草稿是否跑题;能运行的文本,仍然需要一份可被阅读的理由。

名字从哪来

comment 的本义是「评注」。写在书页空白处的话不改变正文,却帮助下一个读者进入作者的思路。代码注释是同一类对象:它属于文本,不属于执行。

与此相关的还有「文档字符串」(docstring):放在 函数 或 类 开头的说明,有时可被工具提取。日常可靠、且解释器明确忽略的,仍是 # 这一条线。

它怎么工作

解释器读到 #,忽略到行末。字符串里面的 # 不会开启注释:print("# 标题") 仍会打印这些字符,因为此时它是数据,不是结构标记。

Python 没有单独的多行注释语法。连续多行 #,或偶尔用三重引号写成的字符串充当块说明,都是习惯而非另一种执行规则。真正被跳过的,仍是注释;被当成字符串求值的,仍会占用一次求值,哪怕结果没有被使用。

生活里在哪里

实验报告页边的备注、乐谱上的指法、地图图例,都不改变对象本身,却改变下一个使用者如何理解对象。工程图纸上的公差与适用范围,更接近好注释该做的事:标出这份设计在何种条件下成立。把每一根尺寸线再翻译成口语,并不能代替一张清楚的图纸。

和相近概念的差别

注释不是 print。print 的结果出现在输出区;注释根本不执行,使用者也看不见它,除非打开源文本。

命名清楚的 变量 和函数可以减少注释。名字已经在当前这一层说话时,不必再把同一句话写两遍。注释也不能代替 抽象:细节若仍摊在主流程里,读的人还是要同时消化所有步骤。

常见误会

误会 1:把每一行代码翻译成自然语言,就是好注释。

n = n + 1 # 把 n 加一 没有提供新信息。该写的是「为何在此处加一」或「n 的合法范围」。

误会 2:注释可以让某行「差不多算执行了」。

被注释掉的代码不会运行。要看效果,得取消注释,或另写一行真正执行的语句。

误会 3:有了生成工具,注释就可以省略。

草稿更容易在表面上能跑。没有意图说明,验收的人无法判断它是否在为问题建模。见 对话式编程。

想知道更多

  • 书:埃里克·马瑟斯《Python编程:从入门到实践(第3版)》
  • 书:艾伦·唐尼《像计算机科学家一样思考Python(第2版)》
  • 书:布鲁克希尔《计算机科学概论》

未登录时不会保存学习进度