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}