Wie genau funktionieren Defaultwerte in Python?
Hallo, ich habe folgende Frage, die ich mit dieser Funktion hier verdeutlichen möchte:
Angenommen wir haben definiert:
def summe(a, b, c=0, d=0):
return a + b + c + d
summe(1,2,3,4)
#Im Ergebnis dieser Funktion kommt jetzt 10 raus: Verstehe ich es richtig, dass die 3 und 4 in diesem Fall den Defaultwerten von c=0 und d=0 übergeben wurden, also dass der Funktionsparameter c den Wert 3 und der Funktionsparameter d den Wert 4 zugeschrieben bekommen hat? Anders kann ich mir nicht erklären, wie diese Funktion so geht (sie läuft ja in Python), denn a und b können ja nur durch 2 Werte belegt werden, sodass c und d durch 3 und 4 belegt werden müssen, obwohl sie ursprünglich als Wert 0 zugeschrieben bekommen haben. Sind Defaultwerte also sowas wie optionale Parameter, die immer dann genutzt werden, wenn man sie belegen kann?
Okay, das mit der Kommentierfunktion hat nicht geklappt, bin neu hier, deshalb nochmal als Text:
Im Ergebnis dieser Funktion kommt jetzt 10 raus: Verstehe ich es richtig, dass die 3 und 4 in diesem Fall den Defaultwerten von c=0 und d=0 übergeben wurden, also dass der Funktionsparameter c den Wert 3 und der Funktionsparameter d den Wert 4 zugeschrieben bekommen hat? Anders kann ich mir nicht erklären, wie diese Funktion so geht (sie läuft ja in Python), denn a und b können ja nur durch 2 Werte belegt werden, sodass c und d durch 3 und 4 belegt werden müssen, obwohl sie ursprünglich als Wert 0 zugeschrieben bekommen haben. Sind Defaultwerte also sowas wie optionale Parameter, die immer dann genutzt werden, wenn man sie belegen kann?
5 Antworten
Die Defaultwerte werden genau dann genutzt, wenn kein Wert übergeben wird. Im konkreten Aufruf weist Du c=3 und d=4 zu.
Als Ergänzung:
summe(5,6,d=3)
Mal probieren ;-)
Nachtrag:
Ja, mit (sinnvollen) Defaultwerten kann man Optionalität von Parametern erreichen. Die benannten Argumente liefern dabei die Möglichkeit auch Lücken zu lassen, also selektiv Defaults zu überschreiben.
Wenn Du länger mit Python arbeitest, dann wirst Du auch in den Bibliotheken diverse Beispiele hierfür sehen.
Hier vielleicht mal ein Beispiel:
random.choices (population, weights=None, *, cum_weights=None, k=1)
k gibt hierbei die Zahl der zu ziehenden Elemente an. Ohne Angabe wird hier 1 verwendet. Möchte ich nun eine Auswahl der Größe 10 ziehen, aber auch keine Gewichtung haben, also Uniformität, dann kann ich mit folgendem Aufruf arbeiten:
random.choices(sequence,k=10)
weights verbleibt also bei None (cum_weights dito), es gibt keinen Gewichtungsvektor, aber k wird auf 10 gesetzt, weil ich 10 Elemente aus der Sequenz uniform ziehen möchte.
Die Defaultwerte sind tatsächlich so etwas wie "Ersatzwerte", die nur zum tragen kommen wenn kein Parameter übergeben wurde. Du kannst dadurch der Funktion entweder vier Parameter übergeben, dann werden alle vier verwendet (wie hier der Fall), oder du übergibst ihr nur drei oder zwei Parameter, dann werden für die fehlenden Parameter die Defaultwerte genommen.
summe(1,2,3,4) # 1+2+3+4=10
summe(1,2,3) # 1+2+3+0=6
summe(1,2) # 1+2+0+0=3
def summe(a, b, c=0, d=0):
return a + b + c + d
summe(1,2,3,4)
summe(1, 2, 3, 4) -> 1 ist a, 2 ist b, 3 ist c, 4 ist d. Es geht immer nach der Reihe.
Weitere Möglichkeiten sind summe(1, 2, 3), summe(1, 2) aber nicht summe(1) ...
Deine default Werte sagen aus, dass wenn c oder d fehlen, werden sie durch 0 ersetzt. Heißt du schreibst summe(1, 2, 3) aber er behandelt es wie summe(1, 2, 3, 0), weil d den default wert 0 hat. Problematisch wird es mit zwischendrin nicht existierenden: summe(1, 2, 4). Nun wollte ich das c den Standard Wert 0 bekommt, aber 4 ist ja an dritter Stelle. Deshalb bekommt weiterhin D den Dritten Wert. Das sollte ich aber durch ein summe(1, 2, d=4) lösen können, wenn ich mich nicht irre
Die Defaultwerte kommen nur zum Zug, wenn kein Wert übergeben wurde.
In deinem Beispiel übergibst du alle 4 Parameter, also spielen die Defaults hier gar nicht mit.
Danke, hat jetzt Klick gemacht. Hab den Sinn und Zweck von Defaultwerten nicht verstanden, aber wenn ich sie nicht verwenden würde, dann würde eine Fehlermeldung auftauchen, wenn ich am Ende nur summe(1,2) schreiben würde, weil die Parameter c und d nicht belegt sind. Durch die Vergabe von Defaultwerten umgeht man das Problem also.
Danke!
https://www.google.com/amp/s/www.geeksforgeeks.org/default-arguments-in-python/amp/
Wenn keine Argumente für c und d übergeben werden, dann nimmt er die Default Werte
Meine Frage ist dabei, ob ich in diesem Fall c den Wert 3 und d den Wert 4 übergeben habe.