忽略python中的其他关键字参数

时间:2015-04-16 16:30:03

标签: python function keyword-argument

想象一下,我有一个像

这样的功能
def foo(x):
    ...

当我用字典{ 'x': 42, 'y': 23 }作为关键字参数调用它时,我得到一个TypeError

>>> foo(**{ 'x': 42, 'y': 23 })
...
TypeError: foo() got an unexpected keyword argument 'y'

是否有一种使用关键字参数进行函数调用的好方法,其中只是忽略了其他关键字参数?

到目前为止我的解决方案:我可以定义辅助函数:

import inspect

def call_with_kwargs(func, kwargs):
    params = inspect.getargspec(func).args

    return func(**{ k: v for k,v in kwargs.items() if k in params})

现在我可以做到

>>> call_with_kwargs(foo, { 'x': 42, 'y': 23 })
42

有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

如果改变你的函数没问题,那么只需添加一个catch-all **kw参数:

def foo(x, **kw):
    # ...

并忽略函数中捕获的kw