文章来源: Python猫shell
做者:豌豆花下猫编程
关于编程语言中的注释,其重要性基本上已为你们所共识。less
然而关于注释的规范,这个话题就像咱们以前聊过的缩进、终止符和命名方式同样,众口难调。编程语言
注释符一般可分为两种,即行注释与块注释(inline/block),它们在不一样的编程语言中的符号可谓让人眼花缭乱。ide
好比行注释符,它至少有如下的 17 种之多(出自维基百科):ui
其中两个最大的阵营分别是“//”与“#”号:spa
// 注释符: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 为何用“#”号做注释符,而不是“//”呢?blog
这个问题恐怕没办法从解析的效率、符号的辨识度和输入的便利性等方面回答,由于它们基本上没有区别。ip
我没有找到官方的解释,可是从这些注释符的阵营中,已经不可贵出一个较为合理的解释:rem
// 注释符基本上被 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 的注释符用法,你们是怎么想的呢?欢迎留言交流。