为什么Python没有多行注释?

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

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

而且

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

但从技术上讲,这些是字符串,对吧?

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

177582 次浏览

这可能又回到了一个核心概念,即应该有一种明显的方法来完成一项任务。额外的注释样式增加了不必要的复杂性,并可能降低可读性。

三引号在文档字符串中用作多行注释。# comments被用作内联注释,人们已经习惯了。

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

参见PEP 0008评论

看看你的Python编辑器是否为块注释提供了一些快捷键。Emacs支持它,Eclipse也支持,大概大多数像样的ide都支持。

我怀疑你会得到一个比“Guido觉得不需要多行注释”更好的答案。

Guido有在推特上关于这个:

Python提示:可以将多行字符串用作多行注释。除非用作文档字符串,否则它们不会生成代码!: -)

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

另一方面,对于超文本标记语言,更多的是需要多线程序。继续输入<!--comments like this-->就更难了。

这只是猜测。但

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

因为#惯例是一种常见的惯例,用多行注释确实没有什么是用#符号注释做不到的。这是一个历史上的偶然,就像/* ... */注释的祖先可以追溯到PL/I,

三引号文本不应被视为多行注释;按照惯例,它们是文档字符串。它们应该描述你的代码做了什么以及如何使用它,而不是像注释掉代码块这样的事情。

根据Guido, Python中的多行注释只是连续的单行注释(搜索“块注释”)。

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

if False:
# A bunch of code
# This
# is
# a
# multi-line
# comment

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

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

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

试着用多行注释注释它:

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

哎呀,你的字符串包含结束注释分隔符。

Python的禅宗:

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

就我个人而言,我的评论风格在说Java是像

/*
* My multi-line comment in Java
*/

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

#
# My multi-line comment in Python
#

VB。NET也是一种只有单行注释的语言,我个人觉得它很讨厌,因为注释最终看起来不像点赞的评论,而更像某种引用

'
' This is a VB.NET example
'

单行注释最终比多行注释使用更少的字符,并且不太可能被正则表达式语句中的一些狡猾的字符转义?不过我倾向于同意内德的观点。

此外,多行注释是一个婊子。很抱歉,但是不管使用哪种语言,我只将它们用于调试目的。假设你有这样的代码:

void someFunction()
{
Something
/*Some comments*/
Something else
}

然后,您发现代码中有一些东西无法用调试器修复,因此您开始手动调试,使用这些多行注释注释越来越小的代码块。这将给出函数:

void someFunction()
{ /*
Something
/* Comments */
Something more*/
}

这真让人恼火。

我记得读过一个家伙,他会把他的多行注释放入一个三引号变量中:

x = '''
This is my
super-long mega-comment.
Wow there are a lot of lines
going on here!
'''

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

通过简单地包装代码,注释代码也很容易

x = '''

而且

'''

我通过为我的文本编辑器(TextPad)下载一个宏来解决这个问题,它可以让我突出显示行,然后在每行的第一行插入#。类似的宏删除了#。有些人可能会问为什么多行是必要的,但当您为了调试目的而试图“关闭”一段代码时,它就会派上用场。

在下面使用IDLE进行多行注释:

  • Mac OS X,代码选择后,用Ctrl+3注释代码块,用Ctrl+4取消注释。

  • 窗户,在代码选择后, 使用Ctrl+Alt+3.注释代码块,并使用Ctrl++4取消注释

注释掉Pycharm IDE中的一段代码:

  • 代码|注释与行注释
  • Windows或Linux: Ctrl + /
  • Mac OS: 命令 + /

对于任何在Python中寻找多行注释的人来说,使用三引号格式可能会产生一些有问题的后果,我刚刚经历了艰难的过程。考虑一下:

this_dict = {
'name': 'Bob',


"""
This is a multiline comment in the middle of a dictionary
"""


'species': 'Cat'
}

多行注释将被塞进下一个字符串,使 'species'关键。

做一件事应该只有一种方式,这与多行字符串和单行字符串或switch/case和if的使用相矛盾,不同形式的循环。

多行注释是一个非常常见的功能,让我们面对它,多行字符串注释是一个负面影响的黑客! 我见过很多代码使用多行注释技巧,甚至编辑器也使用它

但我想每种语言都有自己的怪癖,开发者总是坚持不去修正它。我从java方面也知道这样的怪癖,这些怪癖从90年代末就开始了,从来没有被修复过!