参数不兼容时字典解包成函数

Yan*_* F. 2 python dictionary

我不确定这是否可能,我想将字典解压缩到函数中,但我没有类似的参数。是否可以轻松地将字典限制为子集?

def foo(a=0, b=0, c=0):
    print("a=%s, b=%s, c=%s"%(a,b,c))

my_dict = {'a':10, 'b':20, 'd':40}
foo(**my_dict)
Run Code Online (Sandbox Code Playgroud)

输出

TypeError                                 Traceback (most recent call last)
<ipython-input-1-d40731664736> in <module>()
      3 
      4 my_dict = {'a':10, 'b':20, 'd':40}
----> 5 foo(**my_dict)

TypeError: foo() got an unexpected keyword argument 'd'
Run Code Online (Sandbox Code Playgroud)

我想获得

a=10, b=20, c=0
Run Code Online (Sandbox Code Playgroud)

'd' 被自动拒绝的结果。

这只是一个例子。在我的情况下,该函数不是我的,我无法重新定义她的参数,foo 是不可修改的。

在与 foo() 类似的情况下,我有很多函数,这些函数是对象的方法。

有任何想法吗?

dec*_*eze 5

检查函数签名将有助于:

import inspect

params = inspect.signature(foo).parameters.keys()

foo(**{k: v for k, v in my_dict.items() if k in params})
Run Code Online (Sandbox Code Playgroud)