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

sas*_*llo 1 python docstring python-2.7

比方说,我有一个这样的函数:

def myFunc():
    # useful function to calculate stuff
Run Code Online (Sandbox Code Playgroud)

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

def myFunc():
    # useful function to calculate stuff
    pass
Run Code Online (Sandbox Code Playgroud)

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

def myFunc():
    """useful function to calculate stuff"""
Run Code Online (Sandbox Code Playgroud)

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

Hen*_*ter 6

解释器完全忽略注释,因此在缩进后省略块是语法错误.但是,docstring是一个真正的Python对象 - 最基本的是文字str.单独的表达式是有效的代码块:

'This is a string. It is a valid (though pretty useless) line of Python code.'
Run Code Online (Sandbox Code Playgroud)

特别是在docstrings的情况下,还有一些附加功能,例如用于设置__doc__属性.

>>> def myFunc():
...     '''MyDocString'''
...
>>> print(myFunc.__doc__)
MyDocString
Run Code Online (Sandbox Code Playgroud)

请注意,这也适用于类:

>>> class MyClass(object):
...     '''MyClassDocString'''
...
>>> print(MyClass.__doc__)
MyClassDocString
Run Code Online (Sandbox Code Playgroud)


mgi*_*son 5

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

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