ChatGPT解决这个技术问题 Extra ChatGPT

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

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

/*

*/
我想作为一种解释性语言,就像在 sh 或 bash 或 zsh 的情况下一样,# 是发表评论的唯一方法。我猜想以这种方式解释 Python 脚本会更容易。
我知道这个答案很旧,但我遇到了它,因为我有同样的问题。接受的答案确实有效,尽管我对 Python 的了解不够多,无法知道为什么它可能不正确的复杂性(根据 ADTC)。
@BrandonBarney 让我向您解释一下这个问题。使用 ''' 的公认答案实际上创建了一个不执行任何操作的多行字符串。从技术上讲,这不是评论。例如,你可以写 k = '''假评论,真正的字符串'''。然后, print(k) 看看 ADTC 是什么意思。
现在这更有意义了。我习惯于在 vba 中创建未使用的字符串会导致错误。我没有意识到python只是忽略了它。它至少仍然适用于调试和学习,但不是实际开发的好习惯。
在 Python 源代码中,如果你断了一个长行,编辑器会自动缩进它,以表明断行真的是前一行的一部分?如果我分解一长串伪代码,我应该这样做吗?

l
larsks

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

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

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

Guido van Rossum(Python 的创建者)tweeted this 作为“专业提示”。

但是,Python 的样式指南 PEP8 favors using consecutive single-line comments 是这样的:

# This is a multiline
# comment.

...这也是您在许多项目中会发现的。文本编辑器通常有一个快捷方式来轻松完成此操作。


嗯。我在 python 脚本 test.py 中放了一个巨大的多行字符串,只是为了看看。当我执行 import test 时,会生成一个 test.pyc 文件。不幸的是,pyc 文件很大,并且包含作为纯文本的整个字符串。是我误解了什么,还是这条推文不正确?
@unutbu,如果它是文件中唯一的东西,它就是一个文档字符串。在它前面加上一些代码,它就会从 pyc 中消失。我编辑了答案并将“模块”放入具有文档字符串的事物列表中。
我不喜欢多行字符串作为注释。语法高亮将它们标记为字符串,而不是注释。我喜欢使用一个体面的编辑器,它会在我输入时自动处理注释掉区域和包装多行注释。当然,这是品味问题。
作为惯例,我发现将 """ 用于文档字符串,将 ''' 用于块注释很有帮助。通过这种方式,您可以将 ''' 包裹在您常用的文档字符串周围而不会发生冲突。
虽然您可以将多行字符串用作多行注释,但令我惊讶的是,这些答案都没有提到专门建议从连续单行注释构建多行注释的 the PEP 8 subsection,用空白 # 行来区分段落。
P
Peter Mortensen

Python 确实有一个 multiline string/comment syntax,除非用作文档字符串,否则 multiline strings generate no bytecode - 就像 # 前置注释一样。实际上,它的行为与评论完全一样。

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

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

在没有某些文本编辑功能的情况下使用 Python 编程可能是一种痛苦的体验。找到合适的编辑器(并知道如何使用它)可以对 Python 编程体验的感知方式产生很大影响。

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

为防止链接衰减,以下是 Guido van Rossum's tweet 的内容:

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


三重引号字符串 (''') 确实可以实现多行注释。
谢谢.. 使用 (''') 和 (""") 注释掉该块,但它对 Django 应用程序没有帮助。所以选择了 IDLE,并且有像注释掉区域和取消注释区域这样的选项(快捷方式:Alt+ 3 和 Alt+4 分别在 Format 菜单下。现在比以往任何时候都更容易..
您还应该考虑使用 IDE。是的,它们很重,但如果使用得当,它们确实可以增加编码时间。我个人曾经使用 PyDev,现在使用 PTVS(与 Visual Studio)。我肯定会推荐 PTVS,因为它非常好用,包含上述功能以及更多功能 - 与 virtualenvs 的直接集成,以及非常好的调试,至少可以说
@HappyLeapSecond 我认为您应该澄清它说“Python 没有真正的多行注释语法,但支持可用作注释的多行字符串。”
我想要的是一种在测试时注释掉整个代码块的简单方法。其他语言使这变得容易。 Python只是一种痛苦。
A
Aya

从接受的答案...

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

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

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

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

然后,您可以使用 r'raw string' -- r'\xor' == '\\xor'
好吧,任何“真正的”多行注释也必须被解析并且在语法上是有效的。例如,C 风格的注释不能包含 */,因为它会终止块。
@dan1111 很明显,评论不能包含结束标记,但这是唯一的限制。
'''“评论”有更多限制。您只能注释掉整个语句,而注释可以注释掉部分表达式。示例:在 C 中,您可以注释掉一些列表元素:int a[] = {1, 2, /* 3, 4, */ 5};。使用多行字符串,您不能这样做,因为这会将字符串放入您的列表中。
n
ncica

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

三引号是一种插入不执行任何操作的文本的方法(我相信您也可以使用常规的单引号字符串来执行此操作),但它们不是注释 - 解释器确实执行了该行(但该行没有什么都不做)。这就是为什么三引号“评论”的缩进很重要。
这个解决方案是不正确的,weather2 注释实际上是一个文档字符串,因为它是类中的第一件事。
同意@KenWilliams。这不是一个正确的解决方案。试着把它放在一个函数/类的中间,看看它是如何弄乱你的格式和自动化代码折叠/linting的。
C
Community

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

如果您使用 Notepad++there is a shortcut for block commenting。我相信像 gVimEmacs 这样的其他人也有类似的功能。


这是不正确的,请参阅使用三引号的回复。
@FernandoGonzalezSanchez:这真的没有错。这种“多行字符串作为注释”可以最好地描述为“专业提示”。官方 Python 文档对此只字未提,因此 OP 发布了这个问题。
那是文档字符串的 PEP;该页面上没有提到“评论”。
P
Peter Mortensen

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


P
Peter Mortensen

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

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

Check the official documentation here


这应该是公认的答案
P
Peter Mortensen

如果你在里面发表评论

"""
long comment here
"""

在脚本中间,Python/linter 无法识别。折叠会搞砸,因为上述评论不是标准建议的一部分。最好用

# Long comment
# here.

如果您使用 Vim,您可以使用 commentary.vim 之类的插件,通过按 Vjgcc 来自动注释掉长行的评论。其中 Vj 选择两行代码,gcc 将它们注释掉。

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

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

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


E
Edison

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

macOS:选择代码块,然后选择 ⌘+/

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


P
Peter Mortensen

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

这是一个例子:

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

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

j
jojo

我建议不要将 """ 用于多行注释!

下面是一个简单的示例,用于强调可能被视为意外行为的情况:

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

多行字符串不被视为注释,而是与 '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 string
clearly I am also a string

P
Peter Mortensen

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

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

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

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


P
Peter Mortensen

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)

P
Peter Mortensen

在 Python 2.7.13 上:

单身的:

"A sample single line comment "

多行:

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

您是说单引号在 python 2.7 中创建注释?
使用一组引号创建一个字符串。单行注释应以# 为前缀。
P
Peter Mortensen

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)

你好世界

用三个双引号将文本括起来以支持文档字符串。

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.
'''

G
Georgy

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

print("Hello World")  # printing

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

# single line comment

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

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

前两个建议似乎来自 PEP 8。请注意,对于多行注释,PEP 8 告诉我们从连续的单行注释构造它们,而不是多行字符串:python.org/dev/peps/pep-0008/#block-comments
0
0m3r

使用 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.")

P
Peter Mortensen

是的,两者都可以使用:

'''
Comments
'''

"""
Comments
"""

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


P
Peter Mortensen

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

我正在使用 Anaconda Spyder,它具有:

Ctrl + 1 - 评论/取消评论

Ctrl + 4 - 注释代码块

Ctrl + 5 - 取消注释代码块

它将使用 # 注释/取消注释单行/多行代码。

我觉得是最简单的。

例如,块注释:

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

s
shafik

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

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

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

'''
This is
multiline
comment
'''

另外,提到您可以通过这样的类对象访问文档字符串

myobj.__doc__

这比以前的答案增加了什么?
我的回答包含更多细节,这可能对开发人员有更多帮助。
P
Peter Mortensen

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 用于块取消注释。


P
Peter Mortensen

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

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


P
Peter Mortensen

您可以使用以下内容。这称为 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__

“码头字符串”?你有参考吗?
m
me1234

是的,您可以简单地使用

'''
Multiline!
(?)
'''

或者

"""
Hello
World!
"""

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

# This is also
# a multiline comment.

对于这一点,您可以在 PyCharmVS Code 中选择要评论的文本并按 Ctrl /(或 /) .

但是您可以编辑它们。例如,您可以将快捷方式从 Ctrl / 更改为 Ctrl Shift C

警告!

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

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