【发布时间】:2019-08-01 12:42:45
【问题描述】:
inspect 模块是如何使其看起来像一个没有默认值的参数(尽管它有),这样做的原因是什么(如果有的话)?
inspect.Signature 的帮助显示 return_annotation 参数没有默认值:
>>> import inspect
>>> help(inspect.Signature)
(...)
class Signature(builtins.object)
| Signature(parameters=None, *, return_annotation, __validate_parameters__=True)
(...)
然而,人们可以只用一个参数构造一个签名:
>>> sig = inspect.Signature(None)
>>> # Nothing bad happens
这似乎违反了规则。所以查看Signature 类的代码,我看到了:
def __init__(self, parameters=None, *, return_annotation=_empty, __validate_parameters__=True)
好吧,return_annotation 毕竟确实有一个默认值(这就是inspect.Signature(None) 起作用的原因)。
所以问题是:
inspect 模块是如何实现这个诡计的? 这样做有好的理由吗?
【问题讨论】: