我偶然发现了Python的一个有趣且意想不到的功能:
def fun():
"""Foo’s docstring"""
是有效的功能吗?根据{{3}},“ docstring是一个字符串文字,作为模块,函数,类或方法定义中的第一个语句出现”意味着文档字符串本身被视为一个语句?
我原本预计这里至少需要一个PEP 257语句。上面的例子与pass
的“显性优于隐式”相矛盾,因为pass
表示明确的意图,而文档字符串则没有。
任何人都可以对意图有所了解吗?
答案 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"),您不需要实际的功能体。