好的,我知道三引号字符串可以作为多行注释.例如,
"""Hello, I am a
multiline comment"""
和
'''Hello, I am a
multiline comment'''
但从技术上讲这些都是字符串,对吗?
我用谷歌搜索并阅读了Python风格指南,但我无法找到技术答案,为什么没有正式实现多行,/**/类型的评论.我使用三引号没有问题,但我对导致这个设计决定的原因有点好奇.
1> Ned Batcheld..:
我怀疑你会得到一个更好的答案,"Guido不觉得需要多行评论".
Guido发布了关于此的推文:
Python技巧:您可以使用多行字符串作为多行注释.除非用作文档字符串,否则它们不会生成代码!:-)
请参阅[Guido的推文](https://twitter.com/gvanrossum/status/112670605505077248).
它还使得无法用多行字符串注释掉代码(如果你不小心,可能会导致缩进错误).EW!
混合多行字符串和块注释的一个缺点是IDE不知道你想要什么,因此无法根据需要以不同的样式显示注释.
@SteveBarnes同意生产中大量注释掉的代码很糟糕.但我不明白为什么`如果False'更好.它完成了完全相同的事情,同时不太清楚(因为一眼就看不到代码块被禁用).
我曾经在很多领域工作,如果你的代码包含注释掉的代码,那么你的代码就会被拒绝,你甚至可能会发现自己被邀请更新你的简历.删除不需要的代码,如果代码受版本控制,则不是问题,或者在需要禁用的代码之前使用`if False:`.
@SteveBarnes感谢您在所有情况下都为我们决定这些事情-就像Guido一样。我曾在最大的公司工作过,在很多时候和地方都有这种严格程度。并不是..
2> Steve Losh..:
多行注释很容易破解.如果您在简单的计算器程序中有以下内容怎么办?
operation = ''
print("Pick an operation: +-*/")
# Get user input here
尝试使用多行注释对此进行评论:
/*
operation = ''
print("Pick an operation: +-*/")
# Get user input here
*/
糟糕,您的字符串包含结束注释分隔符.
这个答案最好的一点是SO的语法高亮显示器如何处理它.
这是我们有转义字符的众多原因之一,我不认为这是不支持多行注释的理由.
我不明白你的逻辑 - 也许我的评论不够明确.如果我们使用\作为转义字符:print("选择一个操作:+ - *\/")"*/"不再表示字面/将要打印的结束注释块.继续,用C++测试.事实上,SO的语法高亮显示器将显示有效.这不是一个复杂的主题,它已经存在多年的其他语言.我会要求您更新您的帖子以包括使用转义字符来表明您可以在代码中使用"*/".
如果您的代码包含''',该怎么办?oops你的代码包含结束注释分隔符
多行评论本身并不易破碎; 只是它们的大部分实现都是(包括Python).在我看来,在Python中进行多行注释的显而易见的方法是让我用`#:`开始一个注释块,并使用缩进来显示注释何时结束.它干净,一致,完美地处理嵌套.
-1.这个问题在C或其前身之一中得到了解决.所以从1972年开始,这个答案一直无效.
没有逃脱角色会有帮助.如果字符串中的*/被转义以允许注释,那么当它被**评论时,它将显示在字符串中.否则它会破坏评论.如果你想为字符串添加更多的转义以允许注释,我认为这会给语言的字符串语法增加不必要的复杂性.
@NathanAdams:是的,现在你已经将另一个转义字符引入了你必须使用的字符串**因为多行注释很糟糕,就像我说的那样.原始字符串怎么样?那些人是否也得到了逃脱(这将是他们所拥有的唯一逃脱),还是他们仍然被打破?
3> Triptych..:
三重引用的文本不应被视为多行注释; 按照惯例,它们是文档字符串.它们应该描述代码的作用以及如何使用它,但不能描述注释掉代码块之类的内容.
根据Guido的说法,Python中的多行注释只是连续的单行注释(搜索"块注释").
要注释代码块,我有时会使用以下模式:
if False:
# A bunch of code
从那时起,似乎像Guido [他的想法](https://twitter.com/#!/gvanrossum/status/112670605505077248).
关于"if false:"解决方案,问题是在python中它与标签一起使用时,你必须在"if False:"下的所有代码中选项卡.然后解开大块.所以你必须对你的文本编辑器非常漂亮.
如果你使用一个体面的编辑器,那应该是与*/相同的时间量
4> Jarred McCaf..:
这可能追溯到核心概念,即应该有一种明显的方法来完成任务.其他评论样式会增加不必要的复杂性并可能降低可读性
这就是问题,我相信:使用字符串作为注释并不明显,违反了"执行任务的一种方法"原则,因为有两种方法可以做注释:字符串和`#`.
“我不必键入许多#doohickeys”。这就是为什么几乎所有语言都有块注释(/ * .. * /)的原因。信不信由你,但是我想记录一下我的代码的作用:输入,输出,使用的算法,参数……很多文本也被修改了。仅限于单行注释只是荒谬的。请注意,我不提倡注释掉代码的方法-尽管在尝试其他方法时通常很方便,只要可以理解众所周知的可能的副作用。
我对python抱怨的另一件事是它本质上是一个单人设计的语言.无论Guido说什么都是事实......所以我们在语言版本之间存在所有奇怪的不兼容性.为什么?因为圭多这么说......
5> Abgan..:
好吧,三引号用作文档字符串中的多行注释.#comments用作内联注释,人们可以使用它.
大多数脚本语言也没有多行注释.也许这就是原因?
参见PEP 0008,评论部分
并查看您的Python编辑器是否为块注释提供了一些键盘快捷键.Emacs支持它,以及Eclipse,大概是大多数体面的IDE都支持它.
6> Jeremy Cantr..:
来自Python的禅宗:
应该有一个 - 最好只有一个 - 明显的方法来做到这一点.
7> Kezzer..:
就我个人而言,Java的评论风格就像
/*
* My multi-line comment in Java
*/
因此,如果您的样式是前面示例的典型样式,那么仅具有单行注释并不是一件坏事,因为相比之下,您将拥有
#
# My multi-line comment in Python
#
VB.NET也是一种仅具有单行注释的语言,而且我个人觉得它很烦人,因为注释最终看起来不像注释,而更像某种引用
'
' This is a VB.NET example
'
仅单行注释最终比多行注释具有更少的字符使用率,并且在正则表达式语句中不太可能被某些狡猾的字符转义?我倾向于同意内德。
8> Craig S. And..:
在Pycharm IDE中注释掉一段代码:
代码 带线注释
Windows或Linux:Ctrl+/
Mac OS:Command+/