如何在Python中创建多行注释?

1413 投票
27 回答
2019494 浏览
提问于 2025-04-17 03:56

我该怎么写多行注释呢?大多数编程语言都有块注释的符号,比如:

/*

*/

27 个回答

74

来自被接受的回答...

你可以使用三重引号的字符串。当它们不是文档字符串(在类、函数或模块的第一行)时,它们会被忽略。

这其实是不对的。跟注释不同,三重引号的字符串仍然会被解析,并且必须符合语法规则,无论它们出现在代码的哪个地方。

如果你尝试运行这段代码...

def parse_token(token):
    """
    This function parses a token.
    TODO: write a decent docstring :-)
    """

    if token == '\\and':
        do_something()

    elif token == '\\or':
        do_something_else()

    elif token == '\\xor':
        '''
        Note that we still need to provide support for the deprecated
        token \xor. Hopefully we can drop support in libfoo 2.0.
        '''
        do_a_different_thing()

    else:
        raise ValueError

你会得到以下结果...

ValueError: invalid \x escape

...在 Python 2.x 上,或者...

SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 79-80: truncated \xXX escape

...在 Python 3.x 上。

唯一可以让解析器忽略的多行注释方式是...

elif token == '\\xor':
    # Note that we still need to provide support for the deprecated
    # token \xor. Hopefully we can drop support in libfoo 2.0.
    do_a_different_thing()
105

Python确实有一种可以写多行字符串或注释的方式。除非这些多行字符串被用作文档字符串,否则它们不会生成任何字节码,就像以#开头的注释一样。因此,它实际上就像一个注释。

不过,如果你认为这种行为必须在官方文档中有说明才能算是真正的注释语法,那你说得对,它并不一定是语言规范的一部分。

无论如何,你的文本编辑器应该能够轻松地将选定的区域注释掉(在每一行前面加上#)。如果不能,那就换一个支持这个功能的文本编辑器。

在Python编程时,如果没有一些文本编辑功能,可能会让人觉得很痛苦。找到合适的编辑器(并知道如何使用它)会大大改善你的Python编程体验。

不仅文本编辑器应该能够注释选定的区域,还应该能够轻松地将代码块向左或向右移动,并且在你按Enter时,光标应该自动放在当前的缩进级别。代码折叠功能也很有用。


为了防止链接失效,这里是Guido van Rossum的推文内容:

@BSUCSClub Python小贴士:你可以把多行字符串当作多行注释使用。除非用作文档字符串,否则它们不会生成任何代码!:-)

2152

你可以使用三重引号的字符串。当它们不是文档字符串(也就是在类、函数或模块的最开始部分)时,它们会被忽略。

'''
This is a multiline
comment.
'''

(记得把开头的 ''' 适当地缩进,以免出现 IndentationError 错误。)

Python 的创始人 Guido van Rossum 曾在 推特上分享过这个,称之为“专业小贴士”。

不过,Python 的风格指南 PEP8 更推荐使用连续的单行注释,像这样:

# This is a multiline
# comment.

...而且这也是很多项目中常见的做法。文本编辑器通常有快捷键可以轻松实现这一点。

撰写回答