Python 为什么用 # 号作注释符?

探讨Python为何选择#而非//作为注释符,深入分析注释符的历史原因及Python的设计哲学。

作者:豌豆花下猫

来源:Python猫

关于编程语言中的注释,其重要性基本上已为大家所共识。

然而关于注释的规范,这个话题就像我们之前聊过的缩进、终止符和命名方式一样,众口难调。

注释符通常可分为两种,即行注释与块注释(inline/block),它们在不同的编程语言中的符号可谓让人眼花缭乱。

比如行注释符,它至少有以下的 17 种之多(出自维基百科):

其中两个最大的阵营分别是“//”与“#”号:

  • // 注释符:ActionScript, C (C99), C++, C#, D, F#, Go, Java, JavaScript, Kotlin, Object Pascal (Delphi), Objective-C, PHP, Rust, Scala, SASS, Swift, Xojo

  • # 注释符:Bourne shell and other UNIX shells, Cobra, Perl, Python, Ruby, Seed7, Windows PowerShell, PHP, R, Make, Maple, Elixir, Nim

那么,Python 为什么用“#”号作注释符,而不是“//”呢?

这个问题恐怕没办法从解析的效率、符号的辨识度和输入的便利性等方面回答,因为它们基本上没有区别。

我没有找到官方的解释,但是从这些注释符的阵营中,已经不难得出一个较为合理的解释:

  • // 注释符基本上被 C 语言家族所用

  • # 注释符则基本上是被 Shell 和其它脚本语言所用

Python 在创造之初,从 C 和 Shell 语言中借鉴了不少东西,但它是一种脚本语言,因此在注释符这个最为基础的语言要素上,就偏向了脚本语言的传统。

在某些“类脚本语言”中,比如 yaml、conf 和 ini 等格式的配置文件,它们大多也是采用脚本语言的“#”号作为注释符。

所以,Python 行内注释符的选择,大概可以归结为一种历史原因,即借鉴了 Shell 脚本语言的写法。

相比于行注释符的多样,块注释符更加是让人眼花缭乱:

大多数写法是我从未见过的,有些甚至是难以忍受的,槽点太多!

在这份表格里,我们看不到 Python,因为从严格意义上讲,Python 并没有块注释符!

一般而言,我们在连续的每行内容前面加“#”号,达到块注释的效果。块注释被看作是多个行注释。

PEP-8 中是这么建议的:

Each line of a block comment starts with a # and a single space (unless it is indented text inside the comment).

有人曾在 Twitter 上发问,为什么 Python 没有块注释符?

Guido 回复称,可以将多行字符串用作块注释:

Python 的多行字符串用三对单引号或双引号表示,它还可以用作文档字符串(即Documentation Strings,简写docstrings)。

但是,将它当做多行注释符使用,在语义上则有点怪怪的——它表示的是一段字符串,虽然没有赋值给变量,不会生成代码,但是它并非语义上的注释。

由于脚本语言的特性,它允许我们写一段“无根的字符串”,在语法上没有问题,也没有负作用(negative effects),但是,如果把它作为注释使用,这就是一种副作用(side effects)了。

从这点上考虑,我虽然不反对有人把多行字符串写法用作块注释,但是我会更推荐大家使用“#”号作注释。

另外,对于无用的代码,最好的做法就是直接删除,如果后续发现有需要,再回退修改。详细的多行注释尽量放在文档字符串中,这样在核心代码中就会很少出现多行注释的情况了。

对于 Python 的注释符用法,大家是怎么想的呢?欢迎留言交流。

---------End---------

顺便给大家推荐下我的微信视频号「价值前瞻」,主要分享读书、成长和投资思考,可以了解不一样的我,欢迎扫码关注。


<think>在之前的对话中,用户询问了关于编程语言中单行注释#对应的多行注释符的问题。用户提供的引用内容展示了不同语言的多行注释形式,但需要从中筛选出使用单行注释符为#的语言对应的多行注释符。 根据引用[2]的表格: - Python的单行注释符是#,其多行注释符是三引(&#39;&#39;&#39;或""") - 其他使用#为单行注释的语言如Perl、Ruby等未在表格中直接列出,但引用提到Ruby使用=begin/=end,而Python是表格中唯一明确列出使用#且多行注释为三引的语言 用户问题核心是"单行注释#对应的多行注释符",因此应聚焦于: 1. 主要语言:Python(最典型使用#单行注释) 2. 其他可能语言:Shell脚本、Perl等(但引用未详细说明) 因此回答需明确: - Python:使用三引&#39;&#39;&#39;或"""为多行注释 - 补充说明其他语言(如存在差异) </think>根据提供的引用信息和常见编程语言规范,使用单行注释符`#`的语言对应的多行注释符如下: ### Python(主要语言) - **单行注释**:`# 注释内容` - **多行注释**:使用三对连续单引 `&#39;&#39;&#39;...&#39;&#39;&#39;` 或双引 `"""..."""`(本质是未赋值的多行字符串) 示例: ```python &#39;&#39;&#39; 这是多行注释 可跨越多行说明 &#39;&#39;&#39; print("Hello") ``` ### Shell/Bash脚本 - **单行注释**:`# 注释内容` - **多行注释**: - 方法1:使用 `<<EOF ... EOF` 重定向 ```bash : <<&#39;COMMENT&#39; 这是多行注释 不会被解释执行 COMMENT ``` - 方法2:每行添加`#`(非原生多行语法) ```bash # 行1注释 # 行2注释 ``` ### Perl - **单行注释**:`# 注释内容` - **多行注释**:`=pod ... =cut`(文档注释)或 `__END__` 标记后的内容 示例: ```perl =pod 这是多行注释 用于文档说明 =cut ``` ### Ruby - **单行注释**:`# 注释内容` - **多行注释**:`=begin ... =end` 示例: ```ruby =begin 这是多行注释 可跨越多行 =end ``` ### YAML/配置文件 - **单行注释**:`# 注释内容` - **多行注释**:无原生语法,需每行单独标记`#` --- ### 关键结论 1. **Python** 使用三引为多行注释(通过未赋值的字符串实现) 2. Shell/Perl/Ruby 等语言虽支持单行`#`,但多行注释需特殊语法 3. 严格来说,**只有Python的多行注释与单行`#`直接关联**(通过字符串语法隐式实现),其他语言的多行注释使用完全不同的符[^1][^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值