Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 调用一个函数,该函数需要*args和解包的**kwargs_Python - Fatal编程技术网

Python 调用一个函数,该函数需要*args和解包的**kwargs

Python 调用一个函数,该函数需要*args和解包的**kwargs,python,Python,考虑以下几点: def foo(a, *args): pass def bar(func, funcargs={}, *args, **kwargs): ... func(**funcargs) ... 在这里,我不能直接调用foo,只能将其传递给带有args的bar。所以我总是事先创建一个函数的dict 现在我当前的foo有一个fooa,*args,**kwargs的签名,我需要传递一些*args。但是我不能创建一个*funcargs的dict并将*arg

考虑以下几点:

def foo(a, *args):
    pass


def bar(func, funcargs={}, *args, **kwargs):
    ...
    func(**funcargs)
    ...
在这里,我不能直接调用foo,只能将其传递给带有args的bar。所以我总是事先创建一个函数的dict

现在我当前的foo有一个fooa,*args,**kwargs的签名,我需要传递一些*args。但是我不能创建一个*funcargs的dict并将*args的列表解压缩到其中

如何解决此问题?

将显式序列传递给bar

与bar的args和kwargs类似,还必须分别传递func的位置参数和关键字参数。要与命名方案保持一致,请将func_args作为元组,将func_kwargs作为dict:

这将把位置参数和关键字参数解压为func:

所以我总是事先创建一个函数的dict。为什么总是口述?为什么酒吧不也要一个元组?为什么对关键字参数使用funcargs,而不是funcargs:tuple和funckwargs:dict?
def bar(func, funcargs, *args, **kwargs):
    ...
    func(*funcargs)
    ...

bar(foo, [1,2,3], 9, a="b")
def bar(func, func_args=(), func_kwargs={}, *args, **kwargs):
    ...
    func(*func_args, **func_kwargs)
    ...
def foo(*args, **kwargs):
    print('foo got', args, kwargs)

bar(foo, (1, 2, 3, 4), {'five': 5, 'six': 6}, 7, 8, 9, ten=10, eleven=11)
# foo got (1, 2, 3, 4) {'five': 5, 'six': 6}