Weitergabe benannter Variablenargumente in Python
-
09-06-2019 - |
Frage
Angenommen, ich habe die folgenden Methoden:
def methodA(arg, **kwargs):
pass
def methodB(arg, *args, **kwargs):
pass
In MethodeA möchte ich MethodeB aufrufen und die Kwargs weitergeben.Es scheint jedoch, dass wenn ich definiere methodA
Wie folgt wird das zweite Argument als Positionsargumente und nicht als benannte Variablenargumente übergeben.
def methodA(arg, **kwargs):
methodB("argvalue", kwargs)
Wie stelle ich sicher, dass die **kwargs in MethodeA als **kwargs an MethodeB übergeben werden?
Lösung
Setzen Sie die Sternchen vor die kwargs-Variable.Dadurch übergibt Python die Variable (von der angenommen wird, dass sie ein Wörterbuch ist) als Schlüsselwortargumente.
methodB("argvalue", **kwargs)
Andere Tipps
Nebenbei:Wenn Sie Funktionen anstelle von Methoden verwenden, können Sie auch functools.partial verwenden:
import functools
def foo(arg, **kwargs):
...
bar = functools.partial(foo, "argvalue")
Die letzte Zeile definiert eine Funktion „bar“, die beim Aufruf foo aufruft, wobei das erste Argument auf „argvalue“ gesetzt ist, und alle anderen gerade übergebenen Funktionen:
bar(5, myarg="value")
werde anrufen
foo("argvalue", 5, myarg="value")
Mit Methoden klappt das leider nicht.
Nach ein paar Experimenten habe ich Folgendes herausgefunden:
def methodA(arg, **kwargs):methodB("argvalue", **kwargs)
Scheint jetzt offensichtlich...