为什么当函数体为空时,文档字符串足以满足 python 对函数的定义?

问题描述 投票:0回答:1

我发现了 Python 的这个有趣功能,其中:

def do_nothing(): “”“什么也不做。”“”

与此相同: def do_nothing(): ...

我发现有人在这里评论了: “如果你给你的函数一个文档字符串,你甚至不需要在文档字符串后面放置任何语句。” Python 省略号何时比“pass”更受青睐?

有人可以解释为什么文档字符串充当空操作吗?

我搜索了python语言参考,发现python的函数定义要求函数体有一个语句。 我查看了 CPython 中的语句定义,没有看到任何对省略号或文档字符串的引用作为有效语句: https://docs.python.org/3/reference/compound_stmts.html

python-3.x function docstring no-op
1个回答
0
投票

函数确实需要函数体。在第一个示例中,主体是字符串文字。它是“文档字符串”不是形式语法的问题,而是依赖于上下文的传统解释的问题。在第二个示例中,主体是一个

Ellipsis
对象

>>> ...
Ellipsis
>>> type(_)
<class 'ellipsis'>

出于完全相同的原因,这些也是有效的函数定义:

def f(): {}
def f(): 88
def f(): 3.14159
def f(): 1 < 2
def f(): pass

任何类型的语句都是必要且充分的,即使执行该语句没有效果。后者是语义问题而不是语法问题。语法不会(也不能)强制代码执行一些明智的操作。

© www.soinside.com 2019 - 2024. All rights reserved.