调用函数时过滤关键字参数

时间:2019-04-09 10:15:44

标签: python function dictionary parameter-passing signature

我有两个函数,其中一个正在这样调用另一个函数:

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传递给我使用的功能之前对其进行过滤? (在调用函数的末尾)

原因是我使用的功能无法更改,无法接受所有关键字参数。

1 个答案:

答案 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})