簡體   English   中英

調用一個需要 *args 和解壓的 **kwargs 的函數

[英]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 但是我無法創建*funcargsdict並將*args列表解壓縮到它。

我該如何解決這個問題?

顯式序列傳遞給bar

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

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

bar argskwargs類似,您也必須分別為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM