是否可以在Python中创建多行注释?

问题描述 投票:1095回答:21

我最近开始研究Python,但是我找不到如何实现多行注释的方法。大多数语言都有块注释符号,例如

/*

*/

我在Python中尝试过此方法,但它会引发错误,因此这可能不是正确的方法。 Python实际上是否具有多行注释功能?

python python-3.x python-2.7 comments documentation
21个回答
1711
投票

您可以使用三引号引起来的字符串。如果它们不是文档字符串(类/函数/模块中的第一件事),则将其忽略。

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

((请适当缩进前导''',以避免出现IndentationError。]

Guido van Rossum(Python的创建者)tweeted this作为“专业提示”。

但是,Python的样式指南,PEP8,favors using consecutive single-line comments,这也是在许多项目中都可以找到的内容。编辑者通常都有捷径可以轻松地做到这一点。


4
投票

嗯,您可以尝试一下(运行引号时,第一个问题的输入应用'引号:]


3
投票

[Python中的嵌入式注释以散列哈希字符开头。


2
投票

在Python 2.7.13上:


2
投票

Python中的多行注释:对我来说,“''和“””均有效


1
投票

为了注释掉Python中的多行代码,只需在每行上使用#单行注释:


1
投票

是的,两种都可以使用


1
投票

我建议不要将"""用于多行注释!


1
投票

[Visual Studio Code]通用官方多行注释切换。


0
投票

多行注释实际上在python中不存在。下面的示例包含一个未分配的字符串,该字符串已通过Python验证是否存在语法错误。很少有文本编辑器,例如NotePad++,为我们提供了注释一段书面代码或单词的快捷方式


0
投票

使用PyCharm IDE。


78
投票

Python确实具有multiline string/comment syntax的含义是:除非用作文档字符串,否则multiline strings generate no bytecode就像#前面的注释一样。实际上,它的行为就像评论一样。

另一方面,如果您说此行为必须在官方文档中记录docs为真正的注释语法,那么是的,您应该说它不是保证作为语言规范的一部分。

无论如何,您的编辑者也应该能够轻松注释掉选定的内容区域(将#分别放在每行的前面)。如果没有,请切换至这样的编辑器。

没有某些文本编辑功能的Python编程可能很痛苦经验。找到合适的编辑器(并知道如何使用它)可以大有作为Python编程经验的理解方式有所不同。

编辑者不仅应能够注释掉选定的区域,还应还能够轻松地向左和向右移动代码块,并且应该按下时自动将光标置于当前缩进级别输入。代码折叠也很有用。


为了防止链路衰减,这是Guido van Rossum's tweet的内容:

@BSUCSClub Python技巧:您可以将多行字符串用作多行注释。除非用作文档字符串,否则它们不会生成任何代码! :-)


0
投票

在其他答案中,我发现最简单的方法是使用IDE注释功能,该功能使用#的python注释支持

我正在使用Anaconda Spyder,它具有:-

Ctrl + 1-评论/取消评论Ctrl + 4-注释一段代码Ctrl + 5-取消注释代码块

它将用#注释/取消注释一行/多行代码。

我觉得最简单。

例如区块评论

# =============================================================================
#     Sample Commented code in spyder
#  Hello World !
# =============================================================================

-2
投票

选择要注释的行,然后使用'CTRL +?'在sublime编辑器中注释或取消注释python代码。对于单行,可以使用'shift +#'。


43
投票

从接受的答案...

您可以使用三引号引起来的字符串。如果它们不是文档字符串(类/函数/模块中的第一件事),则将其忽略。

这根本不是真的。与注释不同,三引号字符串仍然会被解析,并且在语法上必须有效,无论它们在源代码中的位置如何。

如果您尝试运行此代码...

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()

34
投票

在Python 2.7中,多行注释为:

"""
This is a
multilline comment
"""

如果您在班级里,应该正确地选择它。

例如:

class weather2():
   """
   def getStatus_code(self, url):
       world.url = url
       result = requests.get(url)
       return result.status_code
   """

24
投票

AFAIK,Python没有阻止注释。要注释单个行,可以使用#字符。

如果使用Notepad++,则为there is a shortcut for block commenting。我确定gVimEmacs之类的其他人也具有类似的功能。


12
投票

我认为不会,除了不处理多行字符串。但是,即使不是全部,大多数Python IDE都有一个“注释”多行代码的快捷键。


10
投票

如果您发表评论

"""
long comment here
"""

在脚本中间,python / linters不会意识到这一点。折叠将被弄乱,因为以上注释不是标准建议的一部分。最好使用

# long comment
# here.

[如果使用vim,则可以使用https://github.com/tpope/vim-commentary之类的插件通过按Vjgcc自动注释掉长行注释。 Vj选择2行代码,gcc注释掉它们。

如果您不想使用上述插件,则可以使用搜索和替换之类

:.,.+1s/^/# /g

这将用#替换当前行和下一行的第一个字符。


8
投票

[多行注释没有这种功能。 #是注释一行代码的唯一方法。你们中的许多人都回答了'''评论'''这是他们的解决方案。尽管它似乎可以正常工作,但在Python中内部使用“''将常规行字符串括起来,解释器不会忽略使用#等注释。

Check official documentation here


5
投票

不幸的是,字符串化并非总是可以用作注释!因此,更安全的做法是在每行前都加#

这里是一个例子:

test1 = [1, 2, 3, 4,]       # test1 contains 4 integers

test2 = [1, 2, '''3, 4,'''] # test2 contains 2 integers **and the string** '3, 4,'
© www.soinside.com 2019 - 2024. All rights reserved.