Beim Schreiben von Funktionen, die andere Unterfunktionen aufrufen, möchte ich dem Aufrufer oft erlauben, beliebige Schlüsselwortargumente für diese Unterfunktionen zu übergeben. Die derzeitige Art und Weise, wie ich dies umsetze, ist jedoch unordentlich und ich suche nach einer klareren, präziseren und wartbaren Art und Weise.Wie übergeben Sie Keyword Args sauber?
Unten ist ein Beispiel dafür, wie ich dies derzeit implementieren:
def foo(a, print_line="Hello World!"):
print a, print_line
def bar(a, number=2, multiple=4):
print a, number * multiple
def baz(a, **kwargs):
if "print_line" in kwargs:
foo(a, print_line=kwargs["print_line"])
else:
foo(a)
bar_kwargs = dict()
if "number" in kwargs:
bar_kwargs["number"] = kwargs["number"]
if "multiple" in kwargs:
bar_kwargs["multiple"] = kwargs["multiple"]
bar(a, **bar_kwargs)
Dieses Verfahren ist fehleranfällig und ich brauche jede kwarg zu implementieren, die ich zum Ausdruck bringen will. Ich kann manchmal mit foo(a, print_line=kwargs.get("print_line", False)
durchkommen, aber ich möchte das Standardargument des Kwargs behalten.
Vielen Dank für Ihre Antwort! Gibt es eine Möglichkeit, etwas Ähnliches für Funktionen zu tun, die ich nicht kontrolliere (d. H. Von einer externen Bibliothek)? –
können Sie sie überschreiben. Ich füge ein Beispiel zu meiner Antwort hinzu. – MCBama