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

1406

如何编写多行注释?大多数语言都有块注释符号,例如:

/*

*/

4
我想,作为一种解释型语言,就像sh、bash或zsh一样,使用#作为注释的唯一方式是有道理的。我猜这样做可以让Python脚本更容易被解释。 - Victor Zamanian
1
我知道这个答案很旧,但我遇到了同样的问题才找到它。接受的答案确实有效,尽管我不太了解Python的细节,也不知道为什么它可能不正确(根据ADTC的说法)。 - Brandon Barney
7
让我向您解释这个问题。被接受的答案使用''', 实际上创建了一个没有作用的多行字符串。技术上讲,那不是注释。例如,你可以写k = '''假注释,真字符串'''。然后,打印(k)来看看ADTC是什么意思。 - pinyotae
3
现在我理解得多清楚了。我习惯使用 VBA,其中创建未使用的字符串会导致错误。我没有意识到 Python 只是忽略它。这仍然适用于调试和学习,但对于实际开发来说不是一个好的做法。 - Brandon Barney
在Python源代码中,如果您打破了一行长代码,编辑器会自动缩进它,以显示该断行实际上是前一行的一部分。如果我要打破一行伪代码,那么我应该这样做吗? - alpha_989
显示剩余3条评论
27个回答

1
除了其他答案外,我发现最简单的方法是使用IDE注释功能,该功能使用Python注释支持#
我正在使用Anaconda Spyder,它具有以下功能:
  • Ctrl + 1 - 注释/取消注释
  • Ctrl + 4 - 注释一个代码块
  • Ctrl + 5 - 取消注释一个代码块
它将使用#来注释/取消注释单行/多行代码。
我认为这是最简单的方法。
例如,一个代码块注释:
# =============================================================================
#     Sample Commented code in spyder
#  Hello, World!
# =============================================================================

0
在Windows操作系统中:您也可以选择文本或代码块,然后按下Ctrl + /,如果要删除注释,则可以执行相同的操作。 在Mac操作系统中:应该使用command + /

0
选择要注释的行,然后在Sublime Text编辑器中使用Ctrl+?进行注释或取消注释Python代码。
对于单行,您可以使用Shift+#

0

在Python中注释掉多行代码的方法是在每一行使用 # 单行注释:

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

在Python中编写“正确”的多行注释的方法是使用带有"""语法的多行字符串。Python具有文档字符串(或docstrings)功能。它为程序员提供了一种简单的方式,在每个Python模块、函数、类和方法中添加快速注释。
'''
This is
multiline
comment
'''

还有,提一下可以通过类对象访问docstring的方法,像这样

myobj.__doc__

这个有什么优势,相比之前的答案? - Peter Mortensen
我的回答包含更多细节,可能会更有帮助于开发者。 - shafik

0

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

此外,在Notepad++中,Ctrl + K是一个快捷键,用于块注释。它会在所选内容下的每一行前面添加一个#Ctrl + Shift + K则是用于取消块注释。

0
你可以使用以下内容。这被称为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
“DockString”?你有参考资料吗? - Peter Mortensen
@PeterMortensen,这是链接 https://www.datacamp.com/community/tutorials/docstrings-python - unknown

-1

我了解了各种方法的缺点,并尝试着想出一种方法,以便检查所有的要求:

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)

优点

  1. 对于其他程序员来说,这是一个注释是显而易见的。它是自描述的。
  2. 它可以编译通过。
  3. help()中不会显示为文档注释。
  4. 如果需要,它可以放在模块的顶部。
  5. 它可以使用宏自动化。
  6. [该注释]不是代码的一部分。它不会出现在pyc中。(除了启用优点#1和#4的一行代码)
  7. 如果Python添加了多行注释语法,代码文件可以通过查找和替换进行修复。仅使用'''没有这个优势。

缺点

  1. 很难记住,需要大量的打字。这个缺点可以通过宏来消除。
  2. 这可能会让新手认为这是块注释的唯一方法。这可能是一个优点,取决于你的观点。它可能会让新手认为代码行与注释“working”神奇地连接在一起。
  3. 它不会被着色为注释。但是,实际上回答了OP问题精神的答案都不会被着色。
  4. 这不是官方的方式,所以Pylint可能会抱怨。我不知道。也许;也许不。

这里是一个VS Code宏的尝试,虽然我还没有测试过:

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

有没有官方的方法可以让pylint不报错?pylint会抱怨使用'''时出现"pylint: String statement has no effect"的问题。 - user1689987
@user1689987,官方没有提供正式的方法。这就是问题所在。您可以将整个“注释”(只是一个字符串)分配给虚拟变量,那么警告就会消失。我会将变量命名为“comment”。 - toddmo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接