我仍在探索Python。今天我遇到了多行字符串。如果我这样做:
a = '''
some-text
'''
变量a的内容是
'\n一些文本\n'
。但这让我感到困惑。我一直以为,如果你用三个单引号('''
)把某些内容括起来,那么它就被注释掉了。所以上述语句在C++中等价于以下代码:a = /*
some-text
*/
我漏掉了什么?
从技术上讲,用三个引号括起来的多行注释实际上不是注释,而是字符串字面量。
你仍然可以使用它们来注释掉一些内容的原因是字符串本身不表示任何操作。它被解析了,但没有任何操作和变量名赋值给它,因此它被忽略了。
你也可以在代码中放置任何其他字面量。只要它没有涉及任何操作或赋值,它就像注释一样被忽略。它并不是注释,只是无用的代码,如果你想这样命名的话。
下面是一个不做任何事情的代码示例:
# This is a real comment.
"useless normal string"
"""useless triple-quoted
multi-line
string"""
[1, "two"] # <-- useless list
42 # <-- useless number
我曾经认为,如果你用三个单引号(''')将某些东西括起来
实际上并不是这样。使用三重引号'''字符串'''
会创建一个字符串表达式,该表达式生成包含引号内字符的字符串。与单引号字符串'字符串'
的区别在于前者可以跨越多行。人们经常使用这种方法来注释掉多行代码。
然而,如果您没有将字符串表达式分配给变量,那么您将得到类似于注释的东西。
'''this is
a useless piece of python
text that does nothing for
your program'''
'''
包装起来将其编码为字符串,有效地注释掉,除非该代码已经包含了一个多行字符串文字'''
。此时,该字符串将被终止。print('''hello!
How are you?''')
# this will not have the intended comment effect
'''
print('''hello!
How are you?''')
'''
def f():\n"hello"\n return 42
可以正常工作,并将"hello"
提供给f.__doc__
。使用多行字符串作为注释所做的事情与在随机位置使用数字完全相同:`do_something; 42; do_something_else'。Python会评估表达式,但由于其值未保存在任何地方,因此它是无用的;如果您使用的是文字,则会被编译掉,除非用作文档字符串。 - Bakuriu