文章来源:Python猫作者:猫下豌豆花但是对于注释的规范,这个话题就像我们之前讲的缩进、终止符、命名方式一样,很难让大家认同。注释通常可以分为两种,即行注释和块注释(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脚本语言的写法。比起五花八门的行注释,块注释更加让人眼花缭乱:大部分都是我没见过的写法,有的甚至让人不忍直视,槽点太多!在此表中,我们没有看到Python,因为Python在技术上没有块注释!一般来说,我们会在每一行连续的内容前加一个“#”号来达到块注释的效果。块注释被视为多行注释。这是PEP-8中的建议:块注释的每一行都以#和一个空格开头(除非它是注释中的缩进文本)。曾经有人在Twitter上问,为什么Python没有块注释?Guido回复说多行字符串可以用作块注释:Python的多行字符串用三对单引号或双引号表示,也可以用作文档字符串(DocumentationStrings,简称docstrings)。但是,将它用作多行注释在语义上有点奇怪——它代表一个字符串,虽然它没有被赋值给一个变量,也没有生成代码,但它不是语义注释。由于脚本语言的特性,它可以让我们写出一个“无根字符串”,语法上没有问题,也没有负面影响(negativeeffects),但是如果作为注释,这是一个副作用(副作用)。从这一点来看,虽然我不反对有人用多行字符串写法作为块注释,但我还是建议大家使用“#”号作为注释。另外,对于没用的代码,最好的办法就是直接删除,后面有需要的时候再回滚修改。详细的多行注释尽量放在docstring中,这样核心代码中就很少会出现多行注释。您如何看待Python中注释的使用?欢迎留言交流。
