Python的空函数不需要传递语句?

Jen*_*ens 6 python python-3.x

我偶然发现了Python的一个有趣且意想不到的功能:

def fun():
    """Foo’s docstring"""
Run Code Online (Sandbox Code Playgroud)

是一个有效的功能?根据PEP 257," docstring是一个字符串文字,作为模块,函数,类或方法定义中的第一个语句出现 ",这意味着文档字符串本身被视为一个语句?

我原以为这至少pass需要一个声明.上面的例子与Python Zen的"显然优于隐式" 相矛盾,因为pass状态是显式意图,而文档字符串则不然.

任何人都可以对意图有所了解吗?

MSe*_*ert 6

字符串文字与任何其他文字一样。如果您只输入一个整数,它也可以工作:

def func():
    1
Run Code Online (Sandbox Code Playgroud)

但是,如果仅使用注释,则无法使用:

def func():
    # test

# IndentationError: expected an indented block
Run Code Online (Sandbox Code Playgroud)

即使它也作为文档字符串添加(保存在__doc__属性中),它也是一个函数级常量:

def func():
    """I'm a function"""

>>> func.__code__.co_consts
("I'm a function", None)
Run Code Online (Sandbox Code Playgroud)

因此,仅作为函数内容的字符串文字的存在不会改变函数实际上是如何 “解析”和“编译”自身的。好吧,除了它还具有not-None __doc__属性。

实际上,它对于abstractmethods 非常方便(请参见“ Python中的抽象方法的主体”),在这里您不需要实际的函数体。