我可以在python中找到“预先分配”的参数吗?

时间:2014-03-02 04:10:50

标签: python arguments inspect

如果我有一个功能或方法,我可以找到哪些参数是“预先分配的”?例如。如果我写

 def action(one, two, three=3): pass

我可以获得在其中包含赋值运算符的参数列表吗?在这种情况下,当然会是

 ['three']

认为答案可能在于inspectinspect.getargspec(action) 真的关闭,因为它返回默认参数的元组,但它没有说明每个参数属于哪个参数。

1 个答案:

答案 0 :(得分:4)

来自inspect.getargspec() documentation

  

defaults 是默认参数值的元组,如果没有默认参数,则为None; 如果此元组具有 n 元素,则它们对应于 args 中列出的最后 n 元素。

强调我的。

因此,要将默认值与参数匹配,请使用:

dict(zip(argspec.args[-len(argspec.defaults):], argspec.defaults))

获取将参数名称映射到其默认值的字典:

>>> import inspect
>>> def action(one, two, three=3): pass
... 
>>> argspec = inspect.getargspec(action)
>>> dict(zip(argspec.args[-len(argspec.defaults):], argspec.defaults))
{'three': 3}