好的,我知道三引号字符串可以作为多行注释。例如,
"""Hello, I am a
multiline comment"""
和
'''Hello, I am a
multiline comment'''
但从技术上讲这些是字符串,对吗?
我已经用Google搜索并阅读了Python样式指南,但我无法找到技术答案,说明为什么没有正式实现多行,/ * * /类型的注释。我使用三引号没有问题,但我对导致这个设计决定的原因有点好奇。
答案 0 :(得分:252)
我怀疑你会得到一个更好的答案,“Guido并不觉得需要多行评论”。
Guido对此有tweeted:
Python技巧:您可以将多行字符串用作多行注释。除非用作文档字符串,否则它们不会生成代码! : - )
答案 1 :(得分:59)
多行注释很容易破解。如果您在简单的计算器程序中有以下内容怎么办?
operation = ''
print("Pick an operation: +-*/")
# Get user input here
尝试使用多行评论对此进行评论:
/*
operation = ''
print("Pick an operation: +-*/")
# Get user input here
*/
糟糕,您的字符串包含结束注释分隔符。
答案 2 :(得分:34)
三重引用的文字不应被视为多行注释;按照惯例,它们是docstrings。它们应该描述代码的作用以及如何使用它,但不能描述注释掉代码块之类的内容。
根据Guido,multiline comments in Python are just contiguous single-line comments(搜索“阻止评论”)。
要评论代码块,我有时会使用以下模式:
if False:
# A bunch of code
答案 3 :(得分:29)
这可能追溯到核心概念,即应该有一种明显的方法来完成任务。其他评论样式会增加不必要的复杂性,并可能降低可读性。
答案 4 :(得分:12)
嗯,三引号用作文档字符串中的多行注释。而#comments用作内联注释,人们可以使用它。
大多数脚本语言也没有多行注释。也许这就是原因?
请参阅PEP 0008,评论
部分看看你的Python编辑器是否为块注释提供了一些键盘快捷键。 Emacs支持它,以及Eclipse,可能是大多数不错的IDE。
答案 5 :(得分:9)
应该有一个 - 最好只有一个 - 显而易见的方法。
答案 6 :(得分:5)
我个人认为Java中的评论风格就像
/*
* My multi-line comment in Java
*/
因此,如果您的风格是前面示例的典型风格,那么仅使用单行注释并不是一件坏事,因为相比之下,您有
#
# My multi-line comment in Python
#
VB.NET也是一种只用单行评论的语言,我个人觉得很烦人,因为评论最终看起来不像评论,更像是某种报价
'
' This is a VB.NET example
'
单行注释最终比多行注释具有更少的字符用法,并且不太可能被正则表达式语句中的某些狡猾字符转义?我倾向于同意奈德的意见。
答案 7 :(得分:4)
# This
# is
# a
# multi-line
# comment
在编辑器中使用注释块或搜索并替换(s / ^ /#/ g)来实现此目的。
答案 8 :(得分:4)
在Pycharm IDE中注释掉一段代码:
答案 9 :(得分:3)
我通过下载我的文本编辑器(TextPad)的宏来解决这个问题,它允许我突出显示行,然后在每行的第一行插入#。一个类似的宏删除#。有些人可能会问为什么多行是必要的,但是当你试图“关闭”一段代码用于调试时它会派上用场。
答案 10 :(得分:0)
因为#约定是常见的,并且你不能用多行注释做任何事情,你不能使用#-sign注释。这是一次历史性的事故,就像回到PL / I的/* ... */
评论的祖先一样,
答案 11 :(得分:0)
这只是猜测..但是
因为它们是字符串,所以它们具有一些语义值(编译器不会删除它们),因此将它们用作文档字符串是有意义的。它们实际上成为AST的一部分,因此提取文档变得更容易。
答案 12 :(得分:0)
假设他们被认为是不必要的。由于只需输入#a comment
就很容易,因此多行注释可以包含许多单行注释。
对于HTML,另一方面,对多线人的需求更多。输入<!--comments like this-->
很难。
答案 13 :(得分:0)
此外,multiline comments are a bitch。很抱歉,但不管语言如何,除了调试之外,我不会将它们用于其他任何事情。假设你有这样的代码:
void someFunction()
{
Something
/*Some comments*/
Something else
}
然后你发现你的代码中有些东西无法用调试器修复,所以你可以通过使用theese多行注释注释掉越来越小的代码块来手动调试它。然后这将给出函数:
void someFunction()
{ /*
Something
/* Comments */
Something more*/
}
这真的很烦人。
答案 14 :(得分:0)
使用 IDLE 进行多行注释:
Mac OS X ,在选择代码后,使用 Ctrl + 3 注释一段代码,并使用取消注释CTRL + 4
Windows , 用 Ctrl + Alt + 3 注释一段代码,并使用 Ctrl + 取消注释 + 4
答案 15 :(得分:0)
对于在Python中寻找多行注释的其他人-使用三引号格式可能会产生一些问题,因为我刚刚学到了很难的方法。考虑一下:
this_dict = {
'name': 'Bob',
"""
This is a multiline comment in the middle of a dictionary
"""
'species': 'Cat'
}
多行注释将被塞入下一个字符串中,将
'species'
键。最好只使用#
进行评论。
答案 16 :(得分:0)
应该只有一种做事的方式,这与多行字符串和单行字符串或switch / case以及不同形式的循环的使用相矛盾。
多行注释是一个非常常见的功能,面对它,多行字符串注释是具有负面影响的技巧! 我看到很多代码都在做多行注释技巧,甚至编辑也都在使用它。
但是我想每种语言都有其怪癖,而开发人员则坚持不修改它。我从Java方面也知道这种怪癖,这些怪癖自90年代后期以来就一直开放,永远都不会解决!
答案 17 :(得分:-1)
我记得读过一个将他的多行评论放入三重引用变量的人:
x = '''
This is my
super-long mega-comment.
Wow there are a lot of lines
going on here!
'''
这确实占用了一些内存,但它为您提供了多行注释功能,而且大多数编辑都会为您突出显示语法:)
通过简单地用
包装代码也很容易注释掉代码x = '''
和
'''