为什么python使用非常规的三引号来评论?

mta*_*med 30 python comments coding-style

为什么python不使用C/C++/Java使用的传统风格的注释:

/**
 * Comment lines 
 * More comment lines
 */

// line comments
// line comments
//
Run Code Online (Sandbox Code Playgroud)

是否有特定原因或者它是否随意?

bal*_*pha 87

Python不会对注释使用三引号.注释使用哈希(aka pound)字符:

# this is a comment
Run Code Online (Sandbox Code Playgroud)

三重引用的东西是一个doc字符串,与注释不同,它实际上可以作为程序的真实字符串:

>>> def bla():
...     """Print the answer"""
...     print 42
...
>>> bla.__doc__
'Print the answer'
>>> help(bla)
Help on function bla in module __main__:

bla()
    Print the answer
Run Code Online (Sandbox Code Playgroud)

只要它是一个字符串,就不是严格要求使用三重引号.使用"""只是一种约定(并且具有多线的优点).

  • "并不是严格要求使用三重引号,只要它是一个字符串.使用""只是一种约定."嗯,整洁.我根本不知道! (8认同)
  • 很好的答案.我补充说,当你想要注释掉一些行以进行调试时,通常使用字符串作为快速和脏的多行注释. (3认同)
  • 很好的示例代码,但是这个答案缺少我正在寻找的一个细节,@eli-collins 在下面的答案中提到了这一点:“在 `def Foo()`、`class Foo()` 或模块的开头,被视为包含该对象文档的字符串,并存储在该对象的“__doc__”属性中”。 (2认同)

Eli*_*ins 46

许多答案得到了许多要点,但并未完全了解事情是如何运作的.总结一下......

# comment是Python如何做实际的评论(类似于bash和其他一些语言).Python只有"到行尾"的注释,它没有明确的多行注释包装(而不是javascript的/* .. */).大多数Python IDE允许您一次选择并注释一个块,这是有多少人处理这种情况.

然后是普通的单行python字符串:它们可以使用'"引用标记(例如'foo' "bar").这些的主要限制是它们不会包裹多行.这就是多行字符串的用途:这些是由三个单引号或双引号('''""")包围的字符串,仅在找到匹配的非转义终结符时终止.他们可以根据需要继续使用多行,并包括所有插入的空格.

这两种字符串类型中的任何一种都定义了完全正常的字符串对象 可以为它们分配变量名称,将运算符应用于它们等.一旦解析,任何格式之间都没有差异.不过,也有基于两个特殊的情况下,其中的字符串和如何使用它?

首先,如果一个字符串刚刚写下来,没有应用额外的操作,并且没有分配给变量,它会发生什么?代码执行时,基本上丢弃了裸字符串.因此人们发现使用多行字符串注释掉大量的python代码很方便(允许你转义任何内部多行字符串).这不是常见的,或在语义上是正确的,但它允许的.

第二使用是其遵循任何这样的裸串立即def Foo(),class Foo(),一个模块的或开始时,都被视为包含文档该对象字符串,并将其存储在__doc__所述对象的属性.这是最常见的情况,其中字符串看起来像是"评论".所不同的是,他们作为解析代码的一部分进行了积极的作用,被存储在__doc__...不像注释,它们可以在运行时读取.

  • 诚然.这个术语可能有点过于随意,但我试图让我的答案持续太久."可以在本地范围词典中对一个命名键存储的自身的引用"可能更接近事实,但是相当冗长,遗憾的是我无法想到一个令人满意的中间立场来引用这样的操作. = "foo" 的` (2认同)

jam*_*san 18

三引号不是评论.它们是跨越多行的字符串文字,并在结果字符串中包含这些换行符.这允许你使用

somestr = """This is a rather long string containing
several lines of text just as you would do in C.
    Note that whitespace at the beginning of the line is\
 significant."""
Run Code Online (Sandbox Code Playgroud)

代替

somestr = "This is a rather long string containing\n\
several lines of text just as you would do in C.\n\
    Note that whitespace at the beginning of the line is\
 significant."
Run Code Online (Sandbox Code Playgroud)


Ste*_*ini 5

大多数脚本语言都使用#作为注释标记,因此要自动跳过shebang(#!),它指定要运行解释程序的程序加载程序(如#!/ bin/bash).或者,可以指示解释器自动跳过第一行,但是将#定义为注释标记更方便,就是这样,因此它被跳过了.