调用函数[duplicate]时过滤关键字参数

问题描述 投票:4回答:1

这个问题在这里已有答案:

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

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 function dictionary parameter-passing signature
1个回答
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})
© www.soinside.com 2019 - 2024. All rights reserved.