为什么Python没有多行注释?

Why doesn't Python have multiline comments?

好的,我知道三引号字符串可以用作多行注释。例如,

1
2
"""Hello, I am a
   multiline comment"""

1
2
'''Hello, I am a
   multiline comment'''

但从技术上讲,这些都是弦,对吗?

我已经在谷歌上搜索并阅读了Python风格指南,但是我找不到一个技术答案来解释为什么没有正式实现多行,/**/类型的注释。我使用三重引号没有问题,但是我有点好奇是什么导致了这个设计决策。


我怀疑你会得到比"guido不觉得需要多行评论"更好的答案。

guido已经在tweet上发布了以下信息:

Python tip: You can use multi-line strings as multi-line comments. Unless used as docstrings, they generate no code! :-)


多行注释很容易破坏。如果在一个简单的计算器程序中有以下内容呢?

1
2
3
operation = ''
print("Pick an operation:  +-*/")
# Get user input here

尝试用多行注释对此进行注释:

1
2
3
4
5
/*
operation = ''
print("Pick an operation:  +-*/")
# Get user input here
*/

糟糕,您的字符串包含结束注释分隔符。


三重引号文本不应被视为多行注释;按照惯例,它们是docstring。它们应该描述代码的功能和使用方法,但不能用于注释代码块之类的事情。

根据guido,python中的多行注释只是连续的单行注释(搜索"block comments")。

为了注释代码块,我有时使用以下模式:

1
2
if False:
    # A bunch of code


这很可能回到核心概念,即应该有一种显而易见的方法来完成任务。附加的注释样式会增加不必要的复杂性,并可能降低可读性。


好吧,在docstrings中,三引号用作多行注释。并且注释被用作内联注释,人们会习惯它。

大多数脚本语言也没有多行注释。也许是因为这个?

见PEP 0008,章节注释

看看你的python编辑器是否提供了块注释的快捷键。Emacs支持它,也支持Eclipse,大概大多数合适的IDE都支持。


来自Python禅:

应该有一种——最好只有一种——显而易见的方法来做到这一点。


个人而言,我的评论风格就像Java一样

1
2
3
/*
 * My multi-line comment in Java
 */

因此,如果您的风格与前面的示例相比是典型的,那么只有一行注释并不是一件坏事,因为相比之下,您可以

1
2
3
#
# My multi-line comment in Python
#

vb.net也是一种只有一行注释的语言,我个人认为它很烦人,因为注释最后看起来不太喜欢注释,更像某种引用。

1
2
3
'
'
This is a VB.NET example
'

单行注释的字符使用量比多行注释少,而且在regex语句中不太可能被一些不可靠的字符转义?不过,我倾向于同意内德的观点。


在Pycharm IDE中注释一块代码:

  • 代码带行注释的注释
  • Windows或Linux:ctrl+/
  • Mac操作系统:commandakbd+/

1
2
3
4
5
# This
# is
# a
# multi-line
# comment

使用注释块或在编辑器中搜索并替换(s/^//g)来实现这一点。


我通过下载文本编辑器(textpad)的宏解决了这个问题,它允许我突出显示行,然后在每行的第一行插入。类似的宏删除了。有些人可能会问为什么需要多行,但当您试图"关闭"用于调试的代码块时,它非常有用。


此外,多行评论是一个婊子。很抱歉,不管使用哪种语言,我都不会将它们用于调试以外的任何用途。假设你有这样的代码:

1
2
3
4
5
6
void someFunction()
{
    Something
    /*Some comments*/
    Something else
}

然后你发现你的代码中有一些你不能用调试器修复的东西,所以你开始手动调试它,通过注释出越来越小的代码块,并使用多行注释。这将提供以下功能:

1
2
3
4
5
6
void someFunction()
{ /*
    Something
   /* Comments */
   Something more*/
}

这真让人恼火。


因为约定是一种常见的约定,而且对于多行注释,您确实没有任何可以做的事情,而对于符号注释,您不能做。这是一个历史性的意外,就像/* ... */的祖先评论回到损益表,


这只是个猜测……但是

因为它们是字符串,所以它们有一些语义值(编译器不会去掉它们),因此将它们用作docstring是有意义的。它们实际上是AST的一部分,因此提取文档变得更容易。


假设他们被认为是不必要的。由于只键入#a comment很容易,所以多行注释只能由许多单行注释组成。

另一方面,对于HTML,更需要多行。很难继续输入


使用IDLE ON的多行注释:

  • Mac OS X在选择代码后,用ctrl+3注释一个代码块,并使用ctrl+4取消注释。

  • Windows,选择代码后,用ctrl+alt+3注释代码块,并使用ctrl+at+4取消注释。


我记得我读过一个家伙,他会把他的多行评论放到一个三重引用的变量中:

1
2
3
4
5
6
x = '''
This is my
super-long mega-comment.
Wow there are a lot of lines
going on here!
'''

这确实占用了一些内存,但它提供了多行注释功能,而且大多数编辑器都会为您突出显示语法:)

简单地将代码包装在

1
x = '''

1
'''