如何在Python中访问关键字参数的默认值?

5 投票
1 回答
745 浏览
提问于 2025-04-27 21:56

我正在尝试使用函数对象的 __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}

撰写回答