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

时间:2014-10-16 09:09:32

标签: python function arguments

我正在尝试使用函数对象的__defaults__属性来获取参数的默认值。它适用于这种情况:

>>> def test(x, y=1): pass
... 
>>> test.__defaults__
(1,)

但为此却没有:

>>> def test(*args, y=1): pass
... 
>>> test.__defaults__
>>> 

为什么test.__defaults__包含None?在这种情况下,如何获取参数的默认值?

1 个答案:

答案 0 :(得分:5)

您使用仅关键字参数创建了一个函数;你不能使用y作为位置参数。关键字参数默认值存储在__kwdefaults__

>>> test.__kwdefaults__
{'y': 1}

引用Standard Types hierarchy datamodel documentation的可调用类型部分:

  

__kwdefaults__:包含仅关键字参数的默认值的dict。

你应该真的使用inspect module Signature object来反省callables;它会通过为您提供丰富的对象来处理这些细节:

>>> sig = inspect.signature(test)
>>> {name: param.default for name, param in sig.parameters.items()
...  if not param.default is param.empty}
{'y': 1}