如何在Python中访问关键字参数的默认值?
我正在尝试使用函数对象的 __defaults__
属性来获取参数的默认值。在这种情况下,它是有效的:
>>> def test(x, y=1): pass
...
>>> test.__defaults__
(1,)
但是在这种情况下就不行了:
>>> def test(*args, y=1): pass
...
>>> test.__defaults__
>>>
为什么 test.__defaults__
会包含 None
?在这种情况下,我该如何获取参数的默认值呢?
1 个回答
7
你创建了一个函数,这个函数有一个仅限关键字的参数;所以你不能把y
当作位置参数来使用。关键字参数的默认值会保存在__kwdefaults__
里:
>>> test.__kwdefaults__
{'y': 1}
引用一下标准类型层次结构文档中的可调用类型部分:
__kwdefaults__
:一个字典,里面包含了仅限关键字参数的默认值。
不过,你最好使用inspect
模块中的Signature
对象来检查可调用对象;这样可以更方便地处理这些细节,因为它会给你提供一个更丰富的对象:
>>> sig = inspect.signature(test)
>>> {name: param.default for name, param in sig.parameters.items()
... if not param.default is param.empty}
{'y': 1}