这个问题在这里已有答案:
我有两个函数,其中一个是这样调用另一个:
def foo(a=1, b=2, c=3):
return a+b*c
def bar(**kwargs):
return 2*foo(**kwargs)
现在,如果我打电话给bar(a=5,b=3,c=1,d=0)
,我会得到一个完全合理的TypeError: foo() got an unexpected keyword argument 'd'
。
问题:有没有办法在将**kwargs
传递给我使用的函数之前对其进行过滤? (在调用函数的末尾)
原因是我使用了无法更改的函数来接受所有关键字参数。
在Python 3中,可以使用字典理解过滤关于被调用函数签名的参数,因此只传递有效参数:
from inspect import signature
def bar(**kwargs):
return 2*foo(**{k:kwargs[k] for k in kwargs if k in signature(foo).parameters})