我有两个函数,其中一个正在这样调用另一个函数:
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
传递给我使用的功能之前对其进行过滤? (在调用函数的末尾)
原因是我使用的功能无法更改,无法接受所有关键字参数。
答案 0 :(得分:1)
在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})