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

时间:2017-09-10 22:15:10

标签: python python-3.x

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

def fun():
    """Foo’s docstring"""

是有效的功能吗?根据{{​​3}},“ docstring是一个字符串文字,作为模块,函数,类或方法定义中的第一个语句出现”意味着文档字符串本身被视为一个语句?

我原本预计这里至少需要一个PEP 257语句。上面的例子与pass的“显性优于隐式”相矛盾,因为pass表示明确的意图,而文档字符串则没有。

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

1 个答案:

答案 0 :(得分:5)

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

def func():
    1

但是,如果您只使用评论,它就无法运作:

def func():
    # test

# IndentationError: expected an indented block

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

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

>>> func.__code__.co_consts
("I'm a function", None)

因此,字符串文字的存在仅作为函数的内容不会改变 函数实际上是如何解析的#34;和"编译"本身。好吧,除了它还有一个非 - __doc__属性。

abstractmethod实际上非常方便(例如参见"Body of abstract method in Python"),您不需要实际的功能体。