让我们说,我有这样的功能:
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"""
这似乎是一个奇怪的特征,因为据我所知,这些都没有在程序中使用。那么,为什么它会像这样呢?
答案 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
。