有没有办法在 Python 中创建多行注释?

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

/*

*/

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

答案

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

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

(确保适当缩进前导'''以避免IndentationError 。)

Guido van Rossum(Python 的创建者)在推特上发了一条 “专业提示”。

但是,Python 的样式指南 PEP8 倾向于使用连续的单行注释 ,这也是在许多项目中都可以找到的。编辑人员通常都有捷径可以轻松地做到这一点。

Python 确实具有多行字符串 / 注释语法 ,即除非用作文档字符串,否则多行字符串不会生成字节码 - 就像#前缀的注释一样。实际上,它的行为就像评论一样。

另一方面,如果您说必须在官方文档中记录此行为才是真正的注释语法,那么可以,您可以肯定地说这不是语言规范的一部分。

无论如何,您的编辑器也应该能够轻松注释掉选定的区域(通过在每行的前面分别放置# )。如果没有,请切换到可以的编辑器。

没有某些文本编辑功能的 Python 编程可能会很痛苦。找到合适的编辑器(并知道如何使用它)可以极大地改变人们对 Python 编程经验的看法。

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


为了防止链路衰减,这是Guido van Rossum 的推文的内容

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

从接受的答案...

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

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

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

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

在 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
   """

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

如果使用的是Notepad ++则有一个用于块注释的快捷方式 。我敢肯定,像gVimEmacs 这样的人也有类似的功能。

我认为没有,除了未处理多行字符串。但是,大多数(如果不是全部)Python IDE 都具有用于 “注释” 多行代码的快捷键。

如果您发表评论

"""
long comment here
"""

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

# long comment
# here.

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

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

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

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

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

在此处查看官方文档

不幸的是,字符串化并不总是可以用作注释!因此,更安全的做法是坚持在每行前面加#的标准。

这是一个例子:

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

test2 = [1, 2, '''3, 4,'''] # test2 contains 2 integers **and the string** '3, 4,'

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

"""
print("What's your name? ")
myName = input()
print("It's nice to meet you " + myName)
print("Number of characters is ")
print(len(myName))
age = input("What's your age? ")
print("You will be " + str(int(age)+1) + " next year.")

"""
a = input()
print(a)
print(a*5)

无论在"""之间包含什么内容,都将被评论。

如果您要查找单行注释,则为#