Passaggio di argomenti variabili con nome in Python
-
09-06-2019 - |
Domanda
Diciamo che ho i seguenti metodi:
def methodA(arg, **kwargs):
pass
def methodB(arg, *args, **kwargs):
pass
Nel metodo A desidero chiamare il metodo B, trasmettendo i kwargs.Tuttavia, sembra che se definisco methodA
come segue, il secondo argomento verrà passato come argomenti di variabile posizionale anziché denominata.
def methodA(arg, **kwargs):
methodB("argvalue", kwargs)
Come posso assicurarmi che **kwargs nel metodo A venga passato come **kwargs al metodoB?
Soluzione
Metti gli asterischi prima della variabile kwargs.Questo fa sì che Python passi la variabile (che si presuppone sia un dizionario) come argomenti di parole chiave.
methodB("argvalue", **kwargs)
Altri suggerimenti
Per inciso:Quando usi le funzioni invece dei metodi, puoi anche usare functools.partial:
import functools
def foo(arg, **kwargs):
...
bar = functools.partial(foo, "argvalue")
L'ultima riga definirà una funzione "bar" che, quando chiamata, chiamerà foo con il primo argomento impostato su "argvalue" e tutte le altre funzioni appena passate:
bar(5, myarg="value")
chiamerà
foo("argvalue", 5, myarg="value")
Sfortunatamente ciò non funzionerà con i metodi.
Alcuni esperimenti e ho capito questo:
def metodoA(arg, **kwargs):metodoB("valoreargomento", **kwargs)
Sembra ovvio adesso...