[英]Call a function that expects *args with unpacked **kwargs
考慮以下:
def foo(a, *args):
pass
def bar(func, funcargs={}, *args, **kwargs):
...
func(**funcargs)
...
我不能直接調用foo
,而只能將它的參數傳遞給bar
。 所以我總是事先創建一個funcargs
dict
。
現在我當前的foo()
有一個foo(a, *args, **kwargs)
的簽名,我需要傳遞一些*args
。 但是我無法創建*funcargs
的dict
並將*args
列表解壓縮到它。
我該如何解決這個問題?
將顯式序列傳遞給bar
。
def bar(func, funcargs, *args, **kwargs):
...
func(*funcargs)
...
bar(foo, [1,2,3], 9, a="b")
與bar
args
和kwargs
類似,您也必須分別為func
傳遞位置和關鍵字參數。 為了與命名方案保持一致,將func_args
作為tuple
,將func_kwargs
作為dict
:
def bar(func, func_args=(), func_kwargs={}, *args, **kwargs):
...
func(*func_args, **func_kwargs)
...
這會將位置和關鍵字參數解包到func
:
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}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.