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

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

and

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

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

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


当前回答

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

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

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

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

x = '''

and

'''

其他回答

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

圭多在推特上说:

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

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

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

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

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

this_dict = {
    'name': 'Bob',

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

    'species': 'Cat'
}

多行注释将被塞到下一个字符串中,使 “物种”的关键。最好只使用#注释。

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

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

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

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

这真让人恼火。

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

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

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

if False:
    # A bunch of code