关于关键字IGNORE额外功能:在Python的题元

Ignore additional keyword arguments in python

本问题已经有最佳答案,请猛点这里访问。

假设我有一个函数

1
2
def foo(x):
    ...

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

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

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

到目前为止,我的解决方案是:我可以定义一个助手函数:

1
2
3
4
5
6
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})

现在我可以做

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

有更好的方法吗?


如果修改函数是可以的,那么只需添加一个catch all **kw参数:

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

忽略函数中捕获的任何kw