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

Way to create multiline comments in Python?

我最近开始学习Python,但是我找不到如何实现多行注释。大多数语言都有像这样的块注释符号

1
2
3
/*

*/

我在Python中尝试过,但是它抛出了一个错误,所以这可能不是正确的方法。Python真的有多行注释功能吗?


可以使用三引号的字符串。当它们不是docstring(类/函数/模块中的第一件事)时,它们将被忽略。

1
2
3
4
'''
This is a multiline
comment.
'''

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

Python的创建者Guido van Rossum将此作为"专业提示"发布在twitter上。

然而,Python的风格指南PEP8倾向于使用连续的单行注释,这也是您在许多项目中会发现的。编辑器通常有一个快捷方式来轻松地做到这一点。


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

另一方面,如果你说这种行为必须记录在官方文件中文档是一种真正的注释语法,那么,你说它不是,你是对的作为语言规范的一部分得到保证。

在任何情况下,您的编辑器也应该能够轻松地评论—输出所选内容区域(通过在每一行前面单独放置一个#)。如果没有,切换到这样的编辑器。

用Python编程而不使用某些文本编辑特性可能是一件痛苦的事情体验。找到合适的编辑器(并知道如何使用它)可以让事情变得更大对Python编程体验的不同理解。

编辑器不仅应该能够注释出所选的区域,而且应该这样做还能够轻松地左右移动代码块,而且应该如此按下时自动将光标置于当前缩进级别进入。代码折叠也很有用。

为了防止链接衰减,以下是Guido van Rossum的推文内容:

@BSUCSClub Python tip: You can use multi-line strings as multi-line comments. Unless used as docstrings, they generate no code! :-)


从公认的答案…

You can use triple-quoted strings. When they're not a docstring (first thing in a class/function/module), they are ignored.

这根本不是真的。与注释不同,三引号字符串仍然被解析,并且必须在语法上有效,无论它们出现在源代码的什么地方。

如果你想运行这段代码…

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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

你会得到……

1
ValueError: invalid \x escape

…在Python 2。x或…

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

…在Python 3. x。

解析器忽略多行注释的惟一方法是…

1
2
3
4
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中,多行注释是:

1
2
3
4
"""
This is a
multilline comment
"""

如果你在一个类中,你应该正确地标记它。

例如:

1
2
3
4
5
6
7
class weather2():
  """
   def getStatus_code(self, url):
       world.url = url
       result = requests.get(url)
       return result.status_code
  """

我希望它能有所帮助!


AFAIK, Python没有块注释。对于注释单独的行,可以使用#字符。

如果您正在使用notepad++,则有一个用于块注释的快捷方式。我确信其他类似gVim和Emacs也有类似的特性。


我认为它没有,只是多行字符串没有被处理。然而,大多数(如果不是所有的话)Python ide都有一个用于"注释掉"多行代码的短键。


如果你加入评论

1
2
3
"""
long comment here
"""

在脚本的中间,python/ l不会重新认识到这一点。折叠会搞砸,因为上面的评论不是标准建议的一部分。使用起来更好

1
2
# long comment
# here.

如果您使用vim,您可以像https://github.com/tpope/vim-commentary这样的插件,通过按下Vjgcc自动注释掉长行注释。其中Vj选择两行代码,并将它们注释出来。

如果你不想使用像上面这样的插件,你可以使用搜索和替换

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

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


在Python 2.7.13:

单:

1
"A sample single line comment"

多行:

1
2
3
4
5
"""
A sample
multiline comment
on PyCharm
"""


嗯,你可以试试这个(运行引号时,第一个问题的输入应该用'引号括起来):

1
2
3
4
5
6
7
8
9
10
11
12
13
"""
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)

"""之间的任何内容都将被注释。

如果您正在寻找单行注释,那么它是#


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

举个例子:

test1 = [1,2,3,4,] # test1包含4个整数

test2 = [1,2," ' 3,4," '] # test2包含两个整数和字符串' 3,4,'


评论:

1
2
3
'''
   Comment what you want here
'''

1
2
3
"""
    Comment what you want here
"""


没有这样的多行注释功能。#是注释一行代码的唯一方法。你们中的许多人回答"一个评论",这是他们的解决方案。虽然它看起来可以工作,但是在python内部,"‘在python中,把包含的行作为一个常规字符串,解释器不会像使用#注释那样忽略它。

查看官方文件


要注释和取消注释代码块,请尝试选择多行代码,然后按Ctrl + /

1
2
3
4
5
6
7
8
n = 5
while n > 0:
    n -= 1
    if n == 2:
        break
    print(n)

print("Loop ended.")

选择所有行,然后按下Ctrl + /

1
2
3
4
5
6
7
8
# n = 5
# while n > 0:
#     n -= 1
#     if n == 2:
#         break
#     print(n)

# print("Loop ended.")

Python中的多行注释:对我来说,"’"和""都奏效了

Ex:

1
2
3
4
5
6
7
a = 10
b = 20
c = a+b
'''
print ('hello')
'''

print ('Addition is : ',a+b)

Ex:

1
2
3
4
5
6
7
a = 10
b = 20
c = a+b
"""
print ('hello')
"""

print ('Addition is : ',a+b)

实际上,python中并不存在多行注释。下面的示例包含一个未分配的字符串,Python将对其进行语法错误验证。很少有像NotePad++这样的文本编辑器为我们提供快捷方式来注释一段代码或单词

1
2
3
4
5
6
7
8
9
10
11
12
13
def foo():
   "This is a doc string."
    # A single line comment
   """
       This
       is a multiline
       comment/String
   """

   """
    print"This is a sample foo function"
    print"This function has no arguments"
   """

    return True

此外,CTRL + KNotepad++中的快捷方式,它在选择项下的每一行前面添加一个#来阻止注释。CTRL + SHIFT+ K用于块取消注释。


python中的内联注释以散列散列字符开始。

1
2
hello ="Hello!" # this is inline comment
print(hello)

Hello!

注意,字符串文字中的哈希字符只是一个哈希字符。

1
2
dial ="Dial #100 to make an emergency call."
print(dial)

Dial #100 to make an emergency call.

哈希字符也可以用于单行或多行注释。

1
2
3
4
5
6
hello ="Hello"
world ="World"
# first print hello
# and print world
print(hello)
print(world)

Hello

World

用双引号括起文本以支持docstring。

1
2
3
4
5
6
7
8
9
10
11
def say_hello(name):
   """
    This is docstring comment and
    it's support multi line.
    :param name it's your name
    :type name str
   """

    return"Hello" + name + '!'


print(say_hello("John"))

Hello John!

用三倍单引号括起文本,用于块注释。

1
2
3
4
'''
I don't care the params and
docstrings here.
'''


多行评论从这里开始

1
2
3
4
5
6
7
8
9
10
11
12
import tkinter as tk
root = tk.Tk()
w = tk.Label( text="Hello Tkinter")

logo = tk.PhotoImage(file="Python.PNG")

w1 = tk.Label(root, image=logo).pack(side="right")
explanation ="""At Present, only GIF and PPM/PGM are supported but am
trying it with PNG. Interface does exit to allow image file to be added easily."""


w2 = tk.Label(root, justify=tk.LEFT,padx = 0, text=explanation).pack(side="left")
root.mainloop()

"‘多行注释到此结束。表示上面的代码不会运行,只是一个注释


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