编程语言中注释的重要性,基本上已经被大家认可了。但是对于注释的规范,这个话题就像我们之前讲的缩进、终止符、命名方式一样,很难让大家认同。注释通常可以分为两种,即行注释和块注释(inline/block),它们在不同编程语言中的符号可谓琳琅满目。比如行注释,它至少有17种类型(来自维基百科):最大的两大阵营是“//”和“#”://注释:ActionScript,C(C99),C++,C#,D,F#,Go、Java、JavaScript、Kotlin、ObjectPascal(Delphi)、Objective-C、PHP、Rust、Scala、SASS、Swift、Xojo#评论:Bourneshell和其他UNIXshell、Cobra、Perl、Python、Ruby、Seed7、WindowsPowerShell,PHP,R,Make,Maple,Elixir,Nim那么,为什么**Python使用“#”而不是“//”作为注释符号呢?**这个问题可能从解析效率、符号识别、输入方便性等方面没有办法回答,因为它们之间基本没有区别。我没有找到官方的解释,但是从这些注解的阵营中,不难得到一个比较合理的解释://注释基本上是C语言家族使用的#注释基本上是Shell等脚本语言使用的使用的Python在创建之初大量借鉴了C和Shell语言,但它是一种脚本语言,所以在注释最基本的语言元素上偏向于脚本语言的传统。在一些“类脚本语言”中,如yaml、conf、ini格式的配置文件,也大多使用脚本语言的“#”符号作为注释符号。所以,选择Python内联注释,大概可以归结为一个历史原因,那就是借鉴了Shell脚本语言的写法。比起五花八门的行注释,块注释更加让人眼花缭乱:大部分都是我没见过的写法,有的甚至让人不忍直视,槽点太多!在这张表中,我们看不到ToPython,因为严格来说Python是没有块注释的!一般来说,我们在每一个连续行的前面加上“#”来达到块注释的效果。块注释被视为多行注释。这是PEP-8中的建议:块注释的每一行都以#和一个空格开头(除非它是注释中的缩进文本)。有人在Twitter上问为什么Python没有块注释?Guido回复据说多行字符串可以用作块注释:Python的多行字符串用三对单引号或双引号表示,也可以用作文档字符串(即DocumentationStrings,简称docstrings).但是,将它用作多行注释在语义上有点奇怪——它代表一个字符串,虽然它没有被赋值给一个变量,也没有生成代码,但它不是语义注释。由于脚本语言的特性,它可以让我们写出一个“无根字符串”,语法上没有问题,也没有负面影响(negativeeffects),但是如果作为注释,这是一个副作用(副作用)。从这一点来看,虽然我不反对有人用多行字符串写法作为块注释,但我还是建议大家使用“#”号作为注释。另外,对于没用的代码,最好的办法就是直接删除,后面有需要的时候再回滚修改。详细的多行注释尽量放在docstring中,这样核心代码中就很少会出现多行注释。您如何看待Python中注释的使用?欢迎留言交流。
