*args und **kwargs in Python
Die besondere Syntax von *args
and **kwargs
in Funktiondefinitionen wird verwenden wenn man mehrere Argumente zu einer Funktion hinzufügen möchte. Das *args mit nur einem Stern wird verwendet um Argumentenlisten variabler Länge zu übergeben die nicht mit einem Keyword versehen sind. Die **kwargs hingegen für diejenigen mit einem Keyword. Schauen wir uns ein Beispiel für eines ohne Keyword an. In diesem Beispiel wird ein formales und ein Argument variabler länge ohne Keyword übergeben.
def var_args_funktion(farg, *args):
print("Formales arg:", farg
for arg in args:
print("weiteres arg:", arg)
var_args_funktion(1, 2, "drei")
Ergebnis:
Formales arg: 1 weiteres arg: 2 weiteres arg: drei
Nun ein Beispiel für **kwargs. Auch hier ein Formales Argument und ein Argument Variabler Länge das mit einem Keyword versehen wird.
def var_args_funktion(farg, **kwargs):
print("formal arg:", farg)
for key in kwargs:
print("Weiters Keyword arg: %s: %s" % (key, kwargs[key]))
var_args_funktion(farg=1, meinArg2=2, meinArg3="drei")
Results:
formal arg: 1 Weiters Keyword arg: meinArg3: drei Weiters Keyword arg: meinArg2: 2
Verwendung *args
and **kwargs
beim Aufruf einer Funktion
Man kann diese Syntax jedoch auch verwenden wenn man eine Funktion aufruft
def var_args_funktion(arg1, arg2, arg3):
print("arg1:", arg1)
print("arg2:", arg2)
print("arg3:", arg3)
args = (2, "drei")
var_args_funktion(1, *args)
Ergebnis:
arg1: 1 arg2: 2 arg3: drei
Und dann noch ein Beispiel mit einem Keyword behafteten **kwargs
def var_args_funktion(arg1, arg2, arg3):
print("arg1:", arg1)
print("arg2:", arg2)
print("arg3:", arg3)
kwargs = {"arg3": "drei", "arg2": 2}
var_args_funktion(1, **kwargs)
Ergebnis:
arg1: 1 arg2: 2 arg3: drei
Du siehst also, du bist nicht beschränkt auf die Anzahl der Argumente. Es kommt manchmal halt auch vor, dass man eben nicht weiß wie viele Parameter/Argumente unserer Funktion übergeben werden. Dann machen diese *args und **kwargs Sinn. Außerdem bei der Verwendung von Dekoratoren. Diese schauen wir uns im nächsten Video an.