调用一个期望* args与解压缩** kwargs的函数

时间:2019-01-06 13:47:27

标签: python

请考虑以下内容:

def foo(a, *args):
    pass


def bar(func, funcargs={}, *args, **kwargs):
    ...
    func(**funcargs)
    ...

在我不能直接调用foo的情况下,只能将其传递给带有参数的bar。因此,我总是总是事先创建dict的{​​{1}}。

现在我当前的funcargs的签名为foo(),我需要传递一些foo(a, *args, **kwargs)。但是我无法创建*args的{​​{1}}并解压缩dict的列表。

我该如何解决?

2 个答案:

答案 0 :(得分:0)

显式序列传递到bar

def bar(func, funcargs, *args, **kwargs):
    ...
    func(*funcargs)
    ...

bar(foo, [1,2,3], 9, a="b")

答案 1 :(得分:0)

args的{​​{1}}和kwargs类似,您还必须分别传递bar的位置和关键字参数。为了与命名方案保持一致,请将func设为func_args,将tuple设为func_kwargs

dict

这会将位置参数和关键字参数都解压缩到def bar(func, func_args=(), func_kwargs={}, *args, **kwargs): ... func(*func_args, **func_kwargs) ... 中:

func