Funktionen mit Standardwerten#

In vielen Fällen kann es sinnvoll sein, einen Standardwert für Funktioninputs anzugeben. So kann man einen oft genutzten oder sinnvollen Input vorgeben, sodass man bei der Benutzung der Funktion diesen nicht immer eingeben muss, ihn aber bei Bedarf trotzdem ändern kann.

Wir setzen Standardwerte für die Parameter einer Funktion, indem wir direkt bei der Definition der Funktion den gewünschten Standardwert zusammen mit einem Gleichheitsszeichen hinter den entsprechenden Parameter/Platzhalter schreiben (quasi wie bei keyword arguments). Wichtig ist dabei, dass bei der Funktionsdefinition die Parameter ohne Standardwert immer vorne und die Parameter mit Standardwert hinten in der Parameterliste stehen. Allgemein sieht das dann so aus:

def FUNCTION_NAME(INPUT1, INPUT2, ..., INPUT3=X, INPUT4=Y, ...):
    DO_SOMETHING_WITH_INPUT

Im Folgenden setze ich in der Funktion say_hello_several_times_to() für den Parameter name den Standardwert "Monty".

def say_hello_several_times_to(n, name="Monty"):
    for i in range(n):
        print("Hello", name, "!")

Führt man die Funktion aus und möchte sowieso den Monty grüßen, dann muss man dies nicht mehr explizit angeben.

say_hello_several_times_to(3)
Hello Monty !
Hello Monty !
Hello Monty !

Möchte man hingegen jemand anderes grüßen, kann man wie gewohnt einen Wert angeben:

say_hello_several_times_to(3, "Python")
Hello Python !
Hello Python !
Hello Python !

Nun setze ich auch für den Input n einen Standardwert.

def say_hello_several_times_to(n=3, name="Monty"):
    for i in range(n):
        print("Hello", name, "!")

Ist man mit den Standardwerten zufrieden, dann muss man nun gar nichts mehr eingeben.

say_hello_several_times_to()
Hello Monty !
Hello Monty !
Hello Monty !

Was ist aber, wenn ich mit dem Standardwert für n zufrieden bin, aber gerne einen eigenen Wert für name eingeben möchte? Gibt man einen einzelnen Wert einfach ohne “Keyword” als Input-Wert ein, würde Python diesen Wert dem ersten Parameter und somit n, nicht aber wie gewollt name zuweisen. Daher müsste man dann den Inputwert für name als keyword argument eingeben:

say_hello_several_times_to(name="Python")
Hello Python !
Hello Python !
Hello Python !