Python中多行注释和多行字符串之间有什么区别?

3

我仍在探索Python。今天我遇到了多行字符串。如果我这样做:

a = '''
some-text
'''

变量a的内容是'\n一些文本\n'。但这让我感到困惑。我一直以为,如果你用三个单引号(''')把某些内容括起来,那么它就被注释掉了。所以上述语句在C++中等价于以下代码:
a = /*
some-text
*/

我漏掉了什么?


注释在这里有很好的解释:https://mail.python.org/pipermail/tutor/2004-February/028432.html - Gianluca Mancini
我一直以为如果你用三个单引号(''')把某些东西括起来,就可以注释掉它。嗯,其实不是这样的。你是在把那个东西包装成一个字符串。字符串,即使是文档字符串,也不是技术上的注释(它们会被评估,而注释则不会)。 - Frédéric Hamidi
回答你的问题,请参见 https://dev59.com/1Gw05IYBdhLWcg3wv0R6#7057488。 - Mark
@GianlucaMancini 所以没有多行注释这种东西。而多行字符串则可以作为文档字符串。两者都会被编译。但是单行注释不会。这样正确吗? - daltonfury42
@daltonfury42 正确。Python源代码完整包含此用法。 - Gianluca Mancini
1
@daltonfury42 你可以使用任何字符串作为文档字符串:def f():\n"hello"\n return 42 可以正常工作,并将 "hello" 提供给 f.__doc__。使用多行字符串作为注释所做的事情与在随机位置使用数字完全相同:`do_something; 42; do_something_else'。Python会评估表达式,但由于其值未保存在任何地方,因此它是无用的;如果您使用的是文字,则会被编译掉,除非用作文档字符串。 - Bakuriu
2个回答

10

从技术上讲,用三个引号括起来的多行注释实际上不是注释,而是字符串字面量。

你仍然可以使用它们来注释掉一些内容的原因是字符串本身不表示任何操作。它被解析了,但没有任何操作和变量名赋值给它,因此它被忽略了。

你也可以在代码中放置任何其他字面量。只要它没有涉及任何操作或赋值,它就像注释一样被忽略。它并不是注释,只是无用的代码,如果你想这样命名的话。

下面是一个不做任何事情的代码示例:

# This is a real comment.

"useless normal string"

"""useless triple-quoted
multi-line
string"""

[1, "two"]  # <-- useless list

42  # <-- useless number

2

我曾经认为,如果你用三个单引号(''')将某些东西括起来

实际上并不是这样。使用三重引号'''字符串'''会创建一个字符串表达式,该表达式生成包含引号内字符的字符串。与单引号字符串'字符串'的区别在于前者可以跨越多行。人们经常使用这种方法来注释掉多行代码。

然而,如果您没有将字符串表达式分配给变量,那么您将得到类似于注释的东西。

'''this is
a useless piece of python
text that does nothing for
your program'''

在Python中,将您的代码用'''包装起来将其编码为字符串,有效地注释掉,除非该代码已经包含了一个多行字符串文字'''。此时,该字符串将被终止。
print('''hello!
How are you?''')

# this will not have the intended comment effect
'''
print('''hello!
How are you?''')
'''

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接