为何Python中空函数仅用docstring即可满足定义要求?
为什么Python里函数仅写文档字符串就能替代空操作?
你会发现Python有个有意思的特性:下面两段代码的效果完全一样:
def do_nothing(): """Does nothing."""
和
def do_nothing(): ...
有人提到过:"如果给函数加了文档字符串,甚至不需要在文档字符串后面加任何语句。"
你可能会疑惑,Python语言参考里说函数定义要求函数体包含语句,但查语句定义文档时,没找到把Ellipsis或文档字符串列为有效语句的说明,那为什么文档字符串能当空操作?
其实原因很简单:
- 文档字符串本质是字符串字面量表达式,而Python里单独的表达式本身就是合法的「表达式语句」——执行这类语句时,Python会计算表达式的值,但不会把它赋值给变量或做其他操作,所以对程序运行来说相当于空操作,刚好满足函数体必须有语句的要求。
- 同理,
...是Python里的Ellipsis对象,它本身也是一个表达式,单独作为语句时同样属于合法的表达式语句,执行后也不会产生任何实际副作用,和文档字符串起到的效果一致。
你没在语句定义里直接看到这两个的原因,是因为它们都归属于更宽泛的「表达式语句」类别,而不是单独列出来的特殊语句类型。
内容的提问来源于stack exchange,提问作者Ariba Siddiqi
相关产品推荐
相关产品推荐

