【问题标题】:Why python docstring is interpreted differently from comment为什么 python docstring 的解释与注释不同
【发布时间】:2014-01-20 22:35:27
【问题描述】:

假设,我有一个这样的函数:

def myFunc():
    # useful function to calculate stuff

这会产生缩进错误,除非我添加pass:

def myFunc():
    # useful function to calculate stuff
    pass

但是,如果我用文档字符串替换注释,则不需要pass

def myFunc():
    """useful function to calculate stuff"""

据我所知,这似乎是一个奇怪的功能,因为程序中没有使用这些功能。那么,为什么它会这样呢?

【问题讨论】:

  • 因为它不是评论,而是被解释的。

标签: python python-2.7 docstring


【解决方案1】:

解释器完全忽略注释,因此在缩进后省略块是语法错误。然而,一个文档字符串是一个真正的 Python 对象——在最基本的情况下,一个文字 str。一个单独的表达式是一个有效的代码块:

'This is a string. It is a valid (though pretty useless) line of Python code.'

特别是在文档字符串的情况下,还有一些额外的功能,例如用于设置__doc__ 属性。

>>> def myFunc():
...     '''MyDocString'''
...
>>> print(myFunc.__doc__)
MyDocString

请注意,这也适用于类:

>>> class MyClass(object):
...     '''MyClassDocString'''
...
>>> print(MyClass.__doc__)
MyClassDocString

【讨论】:

  • 哦,哇,我不知道字符串是实际有效的python语句!
【解决方案2】:

一个文档字符串只是一个注释。它实际上对解释器有意义。在使用文档字符串的情况下,您可以执行myFunc.__doc__ 并实际取回您的文档字符串(在其他情况下使用pass,结果myFunc.__doc__ 将是None)。

换句话说,你实际上是在函数体中添加一些代码来修改它的行为(在某些情况下),所以不需要pass

【讨论】:

    猜你喜欢
    • 2018-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-28
    • 2010-12-20
    • 1970-01-01
    • 2020-08-27
    • 2011-07-21
    相关资源
    最近更新 更多