Eigene Funktionen schreiben · Übung
Zurückgeben ist nicht Ausgeben
Ausgeben und Zurückgeben können beim Testen eines Programms beide einen Wert sichtbar machen, erfüllen aber unterschiedliche Aufgaben.
print(value)zeigt Text in der Ausgabe an.return valuegibt einen Wert an den aufrufenden Code zurück.
Sie zu verwechseln führt zu einem der häufigsten Fehler bei Funktionen.
Ein ausgegebener Wert wird nicht zurückgegeben
Führe dieses Beispiel aus:
Die erste Ausgabezeile stammt aus dem Inneren der Funktion. Die zweite endet mit None.
Jede Python-Funktion gibt einen Wert zurück. Erreicht die Ausführung das Ende ohne ausdrückliches return, gibt die Funktion den besonderen Wert None zurück. Unterwegs etwas auszugeben ändert daran nichts.
Diese Version gibt den String zurück:
Jetzt enthält result den String. Der aufrufende Code entscheidet, ihn anzuzeigen.
Frage, was der aufrufende Code braucht
Verwende print, wenn die Aufgabe der Funktion ausdrücklich darin besteht, etwas anzuzeigen:
def show_count(items):
print(f"Items stored: {len(items)}")
Verwende return, wenn der aufrufende Code den Wert für einen weiteren Vorgang braucht:
def count_message(items):
return f"Items stored: {len(items)}"
Die zurückgegebene Nachricht kann ausgegeben, gespeichert, mit anderem Text kombiniert oder in einem Test geprüft werden.
Keine der beiden Versionen ist immer richtig. Entscheidend ist die Aufgabe der Funktion. Probleme entstehen, wenn der aufrufende Code einen Wert von einer Funktion erwartet, die nur etwas ausgibt.
Eine hilfreiche Frage bei der Fehlersuche
Wenn du None siehst, obwohl du ein Ergebnis erwartet hast, untersuche die Funktion:
Erreicht sie eine ausdrückliche
return-Anweisung?Gibt sie den Wert nur aus?
Hast du
returnversehentlich in einen Zweig gesetzt, der nicht ausgeführt wurde?
Diese kurze Prüfliste hilft dir, viele typische Anfängerfehler bei Funktionen zu beheben.
Du möchtest einen Preis berechnen, ihn in total speichern und mit einem Budget vergleichen. Was sollte calculate_total tun?
Aufgabe
Die aktuelle Funktion build_summary gibt ihre Nachricht aus. Deshalb erhält summary den Wert None, und das Programm gibt eine unerwünschte zweite Zeile aus.
Ändere die Funktion so, dass sie stattdessen den zusammenfassenden String zurückgibt. Behalte die Zuweisung und den abschließenden print-Aufruf bei.
Erwartete Ausgabe:
Lisbon for 4 days
Die Funktion muss auch mit anderen Argumenten funktionieren. Schreibe den Beispieltext nicht fest in den Code.