如何做多行注释?大多数语言都有块注释符号,比如:

/*

*/

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


Python确实有一个多行字符串/注释语法,在这种意义上,除非用作文档字符串,多行字符串不会生成字节码——就像#- prependedcomments一样。实际上,它的作用完全像注释。

另一方面,如果您说这种行为必须在官方文档中记录,才能成为真正的注释语法,那么是的,您说它不保证是语言规范的一部分是正确的。

在任何情况下,您的文本编辑器还应该能够轻松地注释掉所选区域(通过在每行前面单独放置#)。如果不是,切换到一个文本编辑器。

在没有特定文本编辑功能的情况下使用Python编程可能是一种痛苦的体验。找到正确的编辑器(并知道如何使用它)会对如何感知Python编程体验产生很大的影响。

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


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

Python提示:你可以使用多行字符串作为多行注释。除非用作文档字符串,否则它们不会生成代码!: -)


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

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


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

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

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

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

然而,Python的风格指南PEP8倾向于使用连续的单行注释,像这样:

# This is a multiline
# comment.

...这也是你在很多项目中会发现的。文本编辑器通常有一个快捷方式来轻松做到这一点。


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

从公认的答案…

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

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

如果你试图运行这段代码…

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.13:

单:

"A sample single line comment "

多行:

"""
A sample
multiline comment
on PyCharm
"""

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

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

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

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


如果你写了评论

"""
long comment here
"""

在脚本中间,Python/linters不会识别它。折叠将是混乱的,因为上面的注释不是标准建议的一部分。用起来更好

# Long comment
# here.

如果你使用Vim,你可以添加像评论这样的插件。通过按Vjgcc自动注释掉长行注释。其中Vj选择了两行代码,gcc将它们注释掉。

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

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

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


不幸的是,字符串化不能总是用于注释!因此,坚持在每行前加上#的标准更安全。

这里有一个例子:

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

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

Python中的多行注释:

对我来说,“’”和“”都管用。

例子:

a = 10
b = 20
c = a+b
'''
print ('hello')
'''
print ('Addition is: ', a+b)

例子:

a = 10
b = 20
c = a+b
"""
print('hello')
"""
print('Addition is: ', a+b)

没有多行注释这样的特性。#是注释一行代码的唯一方法。 你们中的许多人回答“一个评论”,这是他们的解决方案。

这看起来是可行的,但在Python内部,“'接受作为常规字符串封装的行,解释器不会像使用#的注释那样忽略它。

点击这里查看官方文件


多行注释实际上在Python中并不存在。下面的示例包含一个未赋值的字符串,Python将验证该字符串是否存在语法错误。

一些文本编辑器,如notepad++,为我们提供了注释掉一段书面代码或单词的快捷方式。

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 + K是notepad++中阻止注释的快捷键。它在选定的每一行前面添加一个#。Ctrl + Shift + K表示取消注释。


Python中的内嵌注释以哈希字符开始。

hello = "Hello!" # This is an inline comment
print(hello)

你好!

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

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

拨打100拨打紧急电话。

散列字符也可以用于单行或多行注释。

hello = "Hello"
world = "World"
# First print hello
# And print world
print(hello)
print(world)

你好 世界

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

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

你好约翰!

在文本中加上三个单引号作为块注释。

'''
I don't care the parameters and
docstrings here.
'''

选择要注释的行,然后使用Ctrl + ?在Sublime文本编辑器中注释或取消注释Python代码。

对于单行,可以使用Shift + #。


使用PyCharm IDE。

可以使用Ctrl+/对代码行进行注释和取消注释。 Ctrl+/用单行注释注释或取消注释当前行或几个选定的行(Django模板中的{#或Python脚本中的#)。 在Django模板中,对选中的源代码块按Ctrl+Shift+/,该代码块会被{% comment %}和{% endcomment %}标记包围。

n = 5
while n > 0:
    n -= 1
    if n == 2:
        break
    print(n)

print("Loop ended.")

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


# n = 5
# while n > 0:
#     n -= 1
#     if n == 2:
#         break
#     print(n)

# print("Loop ended.")

是的,两者都可以使用:

'''
Comments
'''

and

"""
Comments
"""

但是,在IDE中运行时,你需要记住的唯一一件事是,你必须“运行”整个文件,以接受多行代码。逐行“RUN”将无法正常工作,并将显示错误。


要注释掉Python中的多行代码,只需在每一行上使用# single-line注释:

# This is comment 1
# This is comment 2 
# This is comment 3

要在Python中编写“正确的”多行注释,就是使用带有“”语法的多行字符串 Python有文档字符串(或文档字符串)特性。它为程序员提供了一种简单的方法,可以为每个Python模块、函数、类和方法添加快速注释。

'''
This is
multiline
comment
'''

另外,提到您可以通过这样的类对象访问docstring

myobj.__doc__

Visual Studio Code通用官方多行注释切换。类似于Xcode的快捷方式。

macOS:选择code-block,然后选择⌘+/

Windows:选择code-block,然后按Ctrl+/


我建议不要在多行注释中使用“”!

这里有一个简单的例子来强调可能被认为是意外的行为:

print('{}\n{}'.format(
    'I am a string',
    """
    Some people consider me a
    multi-line comment, but
    """
    'clearly I am also a string'
    )
)

现在看一下输出:

I am a string

    Some people consider me a
    multi-line comment, but
    clearly I am also a string

多行字符串不被视为注释,但它与'显然我也是一个字符串'连接起来,形成一个单一的字符串。

如果您想注释多行,请根据PEP 8指南执行:

print('{}\n{}'.format(
    'I am a string',
    # Some people consider me a
    # multi-line comment, but
    'clearly I am also a string'
    )
)

输出:

I am a string
clearly I am also a string

在其他答案中,我发现最简单的方法是使用IDE注释函数,该函数使用Python注释支持#。

我正在使用Anaconda Spyder,它有:

Ctrl + 1 -注释/取消注释 Ctrl + 4 -注释代码块 Ctrl + 5 -取消注释代码块

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

我觉得这是最简单的。

例如,一个块注释:

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

你可以使用下面的方法。这叫做DockString。

def my_function(arg1):
    """
    Summary line.
    Extended description of function.
    Parameters:
    arg1 (int): Description of arg1
    Returns:
    int: Description of return value
    """
    return arg1

print my_function.__doc__

如果在带有代码的一行中编写注释,则必须在#符号之前留下2个空格,在#符号之前留下1个空格

print("Hello World")  # printing

如果在新行上写注释,必须写注释,在#符号中留下1个空格kn

# single line comment

要编写超过一行的注释,需要使用3个引号

"""
This is a comment
written in
more than just one line
"""

是的,你可以简单地使用

'''
Multiline!
(?)
'''

or

"""
Hello
World!
"""

好处:它有点难,但在旧版本、打印函数或gui中使用更安全:

# This is also
# a multiline comment.

对于这个,你可以选择你想要注释的文本,并按Ctrl /(或⌘/),在PyCharm和VS Code中。

但是你可以编辑它们。例如,可以更改快捷键“Ctrl /” 按Ctrl Shift C。

警告!

小心,不要覆盖其他快捷方式! 注释必须正确缩进!

希望这个回答能有所帮助。祝你下次写出其他答案时好运!


在windows中:你也可以选择文本或代码块,按CTR + /,如果你想删除注释,也可以这样做。 在mac中:它应该是comment + /


这可以在Vim文本编辑器中完成。

转到评论区第一行的开头。

按“Ctrl+V”进入可视模式。

使用方向键选择要注释的所有行。

按下Shift +我。

按#(或Shift+3)。

按Esc。


我阅读了各种方法的缺点,我想出了这个方法,试图检查所有的盒子:

block_comment_style = '#[]#'
'''#[
class ExampleEventSource():
    def __init__(self):
        # create the event object inside raising class
        self.on_thing_happening = Event()

    def doing_something(self):
        # raise the event inside the raising class
        self.on_thing_happening()        
        
        
class ExampleEventHandlingClass():
    def __init__(self):
        self.event_generating_thing = ExampleEventSource()
        # add event handler in consuming class
        event_generating_thing.on_thing_happening += my_event_handler
        
    def my_event_handler(self):
        print('handle the event')
]#'''


class Event():
 
    def __init__(self):
        self.__eventhandlers = []
 
    def __iadd__(self, handler):
        self.__eventhandlers.append(handler)
        return self
 
    def __isub__(self, handler):
        self.__eventhandlers.remove(handler)
        return self
 
    def __call__(self, *args, **keywargs):
        for eventhandler in self.__eventhandlers:
            eventhandler(*args, **keywargs)

Pros

对于其他程序员来说,这显然是一个注释。这是自描述的。 它编译 它不会在help()中显示为doc注释 如果需要,它可以位于模块的顶部 它可以通过宏自动实现。 [注释]不是代码的一部分。它不会在pyc中结束。(除了支持优点#1和#4的一行代码) 如果在Python中添加了多行注释语法,则可以使用find和replace修复代码文件。简单地使用“”并没有这个优势。

Cons

很难记住。打字量很大。这个骗局可以用宏来消除。 这可能会让新手感到困惑,认为这是惟一的块注释方法。这可能是专业的,只是取决于你的角度。它可能会让新手认为这行代码神奇地连接到注释“working”。 它不会作为注释着色。但话又说回来,没有一个答案能真正解决OP问题的精神。 这不是官方的方式,所以Pylint可能会抱怨。我不知道。也许;也许不是。

这里是一个VS Code宏的尝试,尽管我还没有测试它:

{
    "key": "ctrl+shift+/",
    "command": "editor.action.insertSnippet",
    "when": "editorHasSelection"
    "args": {
        "snippet": "block_comment_style = '#[]#'\n'''#[{TM_SELECTED_TEXT}]#'''"
    }
}