Wie genau funktionieren Defaultwerte in Python?


09.09.2021, 14:52

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

Vom Beitragsersteller als hilfreich ausgezeichnet

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
Woher ich das weiß:Hobby – Programmiere seit eineinhalb Jahren

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.


Ruhrpotter4324 
Beitragsersteller
 09.09.2021, 14:54

Meine Frage ist dabei, ob ich in diesem Fall c den Wert 3 und d den Wert 4 übergeben habe.

0
Ruhrpotter4324 
Beitragsersteller
 09.09.2021, 14:58
@alfredo153

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!

0