为什么Python没有多行注释?

好的,我知道三重引号string可以作为多行注释。 例如,

"""Hello, I am a multiline comment""" 

 '''Hello, I am a multiline comment''' 

但从技术上说这些是string,是正确的?

我已经search了一下,阅读了Python风格指南,但是我无法find技术答案,为什么没有正式实现多行,/ * * /注释types。 使用三重引号我没有问题,但对于导致这个devise决定的是什么我有点好奇。

我怀疑你会得到一个更好的答案,“圭多不觉得需要多行评论”。

Guido在这个推文上说 ,

Python提示:您可以使用多行string作为多行注释。 除非用作文档,否则不生成代码! 🙂

多行注释很容易破解。 如果你在简单的计算器程序中有以下内容?

 operation = '' print("Pick an operation: +-*/") # Get user input here 

尝试使用多行注释发表评论:

 /* operation = '' print("Pick an operation: +-*/") # Get user input here */ 

糟糕,你的string包含结束注释分隔符。

三重引用的文本不应被视为多行注释; 按照惯例,他们是docstrings 。 他们应该描述你的代码的作用,以及如何使用它,但不是注释掉代码块。

根据Guido的说法,Python中的多行注释只是连续的单行注释 (search“块注释”)。

要评论代码块,我有时使用以下模式:

 if False: # A bunch of code 

这可能回到核心概念,应该有一个明显的方式来完成任务。 其他评论风格增加了不必要的复杂性,并可能降低可读性

那么,三重引号在文档中用作多行注释。 #注释被用作内嵌评论,人们可以使用它。

大多数脚本语言也没有多行注释。 也许这是原因?

见PEP 0008 ,部分评论

看看你的Python编辑器是否提供了块注释的快捷键。 Emacs支持它,以及Eclipse,据推测大多数不错的IDE都可以。

从Python的禅 :

应该有一个 – 最好只有一个 – 明显的方法来做到这一点。

就我个人而言,我说Java的评论风格就像

 /* * My multi-line comment in Java */ 

所以,如果你的风格是前面的例子的典型,那么只有单行的评论并不是一件坏事,因为相比之下你会有这样的风格

 # # My multi-line comment in Python # 

VB.NET也是一种只有单行注释的语言,我个人觉得它很烦人,因为注释最终看起来不像评论,更像是某种引用

 ' ' This is a VB.NET example ' 

单行注释最终比多行注释具有更less的字符用法,并且不太可能被正则expression式语句中的某些可笑字符转义? 但我倾向于同意奈德的观点。

 # This # is # a # multi-line # comment 

在你的编辑器中使用注释块或search并replace(s / ^ /#/ g)来实现这一点。

在Pycharm IDE中注释掉一段代码:

  • 代码| 评论与行评论
  • Windows或Linux: Ctrl + /
  • Mac OS: Command + /

我通过为我的文本编辑器(TextPad)下载一个macros来解决这个问题,该macros让我突出显示行,然后在每行的第一行插入#。 一个类似的macros删除#的。 有人可能会问,为什么多行是必要的,但当你试图“closures”一段代码以进行debugging时,它就派上用场了。

因为#约定是一个常用的约定,所以对于多行注释你实际上没有什么可以做的,你不能使用#注释。 这是一个历史性的意外事件,就像PL / I上的/* ... */注释的祖先一样,

假设他们被认为是不必要的。 由于input#a comment非常简单,多行注释可以包含许多单行注释。

另一方面,对于HTML ,还需要multithreading。 继续input<!--comments like this-->是很难的。

这只是一个猜测..但是

因为它们是string,所以它们有一些语义价值(编译器不会摆脱它们),因此将它们用作文档string是有意义的。 他们实际上成为AST的一部分,所以提取文档变得更容易。

此外, 多行评论是一个婊子 。 很抱歉,不pipe语言如何,除了debugging目的,我不会将它们用于其他目的。 假设你有这样的代码:

 void someFunction() { Something /*Some comments*/ Something else } 

然后你发现你的代码中有些东西是你无法用debugging器修复的,所以你可以通过使用多行注释来注释越来越小的代码来手动debugging它。 然后这将给function:

 void someFunction() { /* Something /* Comments */ Something more*/ } 

这真的很刺激

使用IDLE的多行注释:

  • Mac OS X在代码select后,用Ctrl + 3注释一段代码,用Ctrl + 4取消注释。

  • Windows ,在代码select后,使用Ctrl + Alt + 3注释一段代码,使用Ctrl + At + 4取消注释。

我记得读过一篇关于将多行评论放入三重引用variables的人:

 x = ''' This is my super-long mega-comment. Wow there are a lot of lines going on here! ''' 

这确实占用了一些内存,但它提供了多行注释function,而且大多数编辑器都会突出显示你的语法:)

通过简单地包装代码来评论代码也很容易

 x = ''' 

 '''