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

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

/*
*/
1898058 次浏览

我认为它不会,除了不处理多行字符串。然而,大多数(如果不是所有的话)Python IDE都有一个用于“注释掉”多行代码的快捷键。

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

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

在任何情况下,您的文本编辑器也应该能够轻松注释掉选定的区域(通过在每一行前面单独放置#)。如果没有,请切换到这样的文本编辑器。

在没有某些文本编辑功能的情况下使用Python编程可能是一种痛苦的体验。找到合适的编辑器(并知道如何使用它)可以大大改变人们对Python编程体验的看法。

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


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

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

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

如果你使用的是记事本++有一个块评论的快捷方式。我相信gVimEmacs也有类似的功能。

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

'''This is a multilinecomment.'''

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

Guido van Rossum(Python的创建者)发布了这个作为“专业提示”。

然而,Python的风格指南,PEP8,支持使用连续的单行注释,如下所示:

# This is a multiline# comment.

…这也是您在许多项目中会发现的。文本编辑器通常有一个快捷方式可以轻松做到这一点。

在Python 2.7中,多行注释是:

"""This is amultilline comment"""

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

例如:

class weather2():"""def getStatus_code(self, url):world.url = urlresult = 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 deprecatedtoken \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 samplemultiline commenton 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/linter不会识别这一点。折叠会搞砸,因为上面的评论不是标准建议的一部分。最好使用

# Long comment# here.

如果您使用Vim,您可以像commentary.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 = 10b = 20c = a+b'''print ('hello')'''print ('Addition is: ', a+b)

示例:

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

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

它似乎可以工作,但在Python中的'''内部将包含的行作为常规字符串,解释器不会像使用#的注释那样忽略这些行。

点击这里查看官方留档

多行注释在Python中实际上并不存在。下面的示例由一个未分配的字符串组成,Python会验证该字符串是否存在语法错误。

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

def foo():"This is a doc string."# A single line comment"""Thisis a multilinecomment/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 commentprint(hello)

你好!

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

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

拨打#100拨打紧急电话。

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

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

你好

世界

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

def say_hello(name):"""This is docstring comment andit'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 anddocstrings here.'''

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

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

使用PyCharm IDE。

您可以使用Ctrl+/#0#1行代码。Ctrl+/注释或取消注释当前行或具有单行注释的多个选定行#0对于Django模板中选定的源代码块,Pressing Ctrl+Shift+/#1标签包围该块。


n = 5while n > 0:n -= 1if n == 2:breakprint(n)
print("Loop ended.")

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


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

是的,两者都可以使用:

'''Comments'''

"""Comments"""

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

在Python中注释多行代码只需在每一行上使用#单行注释:

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

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

'''This ismultilinecomment'''

另外,请注意您可以通过这样的类对象访问docstring

myobj.__doc__

Visual Studio代码通用官方多行评论切换。类似于Xcode的快捷方式。

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

Windows:选择代码块,然后选择Ctrl+//

我建议不要使用"""进行多行注释!

以下是一个简单的示例,用于突出显示可能被视为意外行为的内容:

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

现在看看输出:

I am a string
Some people consider me amulti-line comment, butclearly I am also a string

多行字符串未被视为注释,但它与'clearly I'm 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 stringclearly 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 arg1Returns:int: Description of return value"""return arg1
print my_function.__doc__

如果你在一行代码中写一个注释,你必须写一个注释,在#符号前留2个空格,在#符号前留1个空格

print("Hello World")  # printing

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

# single line comment

要写超过1行的评论,请使用3个引号

"""This is a commentwritten inmore than just one line"""

是的,您可以简单地使用

'''Multiline!(?)'''

"""HelloWorld!"""

奖金:这有点难,但在旧版本、print函数或GUI中使用更安全:

# This is also# a multiline comment.

对于这个,您可以选择要评论的文本,然后在PyCharmVS代码中按Ctrl/(或/)。

但是您可以编辑它们。例如,您可以从Ctrl/更改快捷方式CtrlShiftC.

强烈警告!

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

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

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

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

到评论区第一行的开头。

按Ctrl+V进入可视模式。

使用箭头键选择要注释的所有行。

按Shift+I。

按#(或Shift+3)。

按Esc。

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

block_comment_style = '#[]#''''#[class ExampleEventSource():def __init__(self):# create the event object inside raising classself.on_thing_happening = Event()
def doing_something(self):# raise the event inside the raising classself.on_thing_happening()        
        
class ExampleEventHandlingClass():def __init__(self):self.event_generating_thing = ExampleEventSource()# add event handler in consuming classevent_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中结束。(除了启用pros#1和#4的一行代码)
  7. 如果多行注释语法被添加到Python中,代码文件可以通过查找和替换来修复。简单地使用'''没有这个优势。

缺点

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

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

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