Python Schlüsselwort-Argumente
-
02-10-2019 - |
Frage
Ich habe mehrere Schichten von Funktionsaufrufen, vorbei, um ein gemeinsames Wörterbuch des Schlüsselwort Argumente:
def func1(**qwargs):
func2(**qwargs)
func3(**qwargs)
Ich möchte einige Standardargumente in einigen der nachfolgenden Funktionsaufrufe liefern, so etwas wie folgt aus:
def func1(**qwargs):
func2(arg = qwargs.get("arg", default), **qwargs)
func3(**qwargs)
Das Problem bei diesem Ansatz ist, dass, wenn arg innerhalb qwargs ist, ein Typeerror mit „bekam mehrere Werte für die Keyword-Argument“ angehoben wird.
Ich will nicht zu Satz qwargs [ „arg“] auf dem Standard, denn dann func3 dieses Argument wird ohne Haftbefehl. Ich könnte eine copy.copy der qwargs und Satz „arg“ in der Kopie machen, aber qwargs große Datenstrukturen darin haben könnte und ich will nicht, um sie kopieren (vielleicht copy.copy würde nicht nur copy.deepcopy ?).
Was ist das pythonic, was hier zu tun?
Lösung
Just zu bauen und verwenden Sie einen anderen dict zum Zwecke func2
des Aufrufs, die ursprüngliche allein für den späteren Aufruf func3
verlassen:
def func1(**qwargs):
d = dict(arg=default)
d.update(qwqargs)
func2(**d)
func3(**qwargs)
Dies ist, wenn Sie eine Einstellung für arg
in qwargs
wollen die default
außer Kraft zu setzen. Ansonsten (wenn Sie default
wollen für arg
in qwargs
jede mögliche Einstellung außer Kraft zu setzen):
def func1(**qwargs):
d = dict(qwargs, arg=default)
func2(**d)
func3(**qwargs)
, da das Schlüsselwort-Argument dict
überschreibt den Wert im Positions Argumente, falls vorhanden.
Andere Tipps
Um einen neuen dict mit den gleichen Schlüssel und Werte erstellen Sie verwenden können,
newdict=dict(qwargs)
Wenn qwargs nicht wirklich viele Schlüssel enthalten, die billig ist.
Wenn es möglich ist, könnten Sie die Funktionen neu schreiben ihre args wirklich als dict statt mehrerer Argumente zu nehmen.