Python注释:#和字符串的区别

30

关于在Python源代码内部放置注释的“标准”方式:

def func():
    "Func doc"
    ... <code>
    'TODO: fix this'
    #badFunc()
    ... <more code>

def func():
    "Func doc"
    ... <code>
    #TODO: fix this
    #badFunc()
    ... <more code>

我更喜欢将常规注释作为字符串而不是使用#作为前缀。 官方的Python风格指南并没有提到使用字符串作为注释(如果我在阅读时没有错过的话)。

我主要喜欢这种方式,因为我认为在注释块中使用#字符看起来很丑陋。据我所知,这些字符串并没有实际用途。

这样做有什么缺点吗?

3个回答

69

不要将字符串(空操作语句)误用为注释。文档字符串,例如模块、类或函数中的第一个字符串,是特殊的,强烈建议使用。

请注意文档字符串是文档,而文档和注释是两个不同的东西!

  • 文档对于理解代码的作用非常重要。
  • 注释解释如何实现代码。

文档被使用你的代码的人阅读,注释则被想要理解代码的人阅读,例如进行维护。

使用字符串进行注释有以下(潜在的)不利之处:

  • 它会让不知道该字符串什么都不做的人感到困惑。
  • 注释和字符串文字在代码编辑器中以不同的方式加亮显示,因此您的风格可能使代码更难阅读。
  • 它可能会影响性能和/或内存使用情况(如果在字节码编译期间未删除字符串,则删除注释是在扫描器级别完成的,因此明显更便宜)

对于Python程序员来说最重要的是:这不符合Pythonic的风格:

应该有一种——最好只有一种显而易见的方法来实现它。

遵循标准,使用注释。


8
记录一下,看起来这不会影响性能。查看dis.dis输出或在编译后的模块上运行strings命令,都没有发现这些字符串的痕迹,因此看起来它们在编译过程中被优化掉了。(不过其他原因已经足够解释这个现象) - Brian

6
我认为在定义(或类)中,只有第一个字符串字面值是“特殊的”,即由解释器存储到定义对象的(或类的)docstring中。
您在代码中放置的任何其他字符串字面值最坏的情况是意味着解释器将在运行时构建字符串值,然后将其丢弃。这意味着通过在代码中散布字符串常量来进行“注释”可能会在性能方面造成成本。
当然,我没有对此进行基准测试,也不太了解Python解释器。

6
当然,缺点是其他人读取时会发现代码字符串和注释字符串交错在一起,可能会令人困惑。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接