为什么python docstring的解释与注释不同

时间:2014-01-20 22:35:28

标签: python python-2.7 docstring

让我们说,我有这样的功能:

def myFunc():
    # useful function to calculate stuff

除非我添加pass

,否则会产生缩进错误
def myFunc():
    # useful function to calculate stuff
    pass

但是,如果我用docstring替换注释,则不需要pass

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

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

2 个答案:

答案 0 :(得分:6)

解释器会完全忽略注释,因此在缩进后省略块是语法错误。但是,docstring是一个真正的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

答案 1 :(得分:5)

文档字符串不是只是评论。它实际上对翻译有意义。在使用docstring的情况下,您可以执行myFunc.__doc__并实际获取文档字符串(在另一种情况下使用pass,结果myFunc.__doc__将为None)。

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