想象一下我有一个像这样的函数:
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
有更好的方法吗?
def func1(x, **kwargs):
可以翻译成:定义一个名为func1的函数,该函数接受一个参数x和任意数量的关键字参数kwargs。 - jonrsharpefunc1()
改为使用catch-all不是一个选项,它必须适用于所有函数吗?例如def func1(x, **kwargs):
? - Martijn Pieterscall_with_kwargs
函数转换成装饰器。 - Julien Spronck