Ausgeben oder zurückgeben?
Anfänger verwechseln oft return und print(), weil beide scheinbar einen Wert herausgeben. Sie tun aber ganz verschiedene Dinge:
print()zeigt dir einen Wert nur in der Ausgabe an. Das Programm kann mit dem Ausgegebenen nicht arbeiten.returngibt den Wert an das Programm, das ihn speichern, damit rechnen oder ihn ausgeben kann.
Sieh dir an, was passiert, wenn eine Funktion ihr Ergebnis ausgibt, statt es zurückzugeben:
def summe_ausgeben(a, b):
print(a + b)
ergebnis = summe_ausgeben(2, 3)
print(ergebnis)Das gibt aus:
5
NoneDie 5 hat das print() in der Funktion ausgegeben. Aber die Funktion hat nichts zurückgegeben, und eine Funktion ohne return gibt None zurück: einen besonderen Wert in Python, der „nichts“ bedeutet. ergebnis ist also None, und das zweite print() gibt None aus.
Wenn du versuchst, mit None zu rechnen, endet das Programm mit einem Fehler:
def summe_ausgeben(a, b):
print(a + b)
gesamt = summe_ausgeben(2, 3) * 2Das gibt aus:
5
Traceback (most recent call last):
File "<exec>", line 4, in <module>
TypeError: unsupported operand type(s) for *: 'NoneType' and 'int'Die Fehlermeldung sagt, dass * nicht mit None (dessen Typ NoneType ist) und einer ganzen Zahl (int) arbeiten kann. Wenn du None oder NoneType siehst, wo du einen Wert erwartet hast, prüfe, ob deine Funktion ein return hat.
Es kann auch andersherum sein: Eine Funktion gibt einen Wert zurück, aber niemand verwendet ihn:
def addiere(a, b):
return a + b
addiere(2, 3)Dieses Programm gibt nichts aus. Die Funktion hat 5 zurückgegeben, aber das Programm hat den Wert weder gespeichert noch ausgegeben, also ging er verloren. Wenn du ihn sehen willst, gib ihn aus: print(addiere(2, 3)).
Wann sollte eine Funktion also ausgeben und wann zurückgeben? Eine Funktion, die etwas berechnet, sollte das Ergebnis zurückgeben. Der Code, der sie aufruft, entscheidet dann, was er damit macht: es ausgeben, speichern oder weiterrechnen. Gib innerhalb einer Funktion nur dann aus, wenn das Anzeigen ihre ganze Aufgabe ist, wie bei hallo_sagen() oder flaeche_ausgeben().
So schreibst du es:
Anweisungen
- 1
Eine Pizza kostet 9 und ein Getränk 3. Die Funktion
bestellpreissoll den Preis einer Bestellung berechnen, aber das Programm gibt zwei Preise aus und endet dann mit dem FehlerTypeError: unsupported operand type(s) for +: 'NoneType' and 'NoneType'. Korrigiere die Funktion: Gib den Preis zurück, statt ihn auszugeben. Das Programm gibt dannZusammen: 63aus. - 2
Vergleiche am Ende des Programms die beiden Bestellungen: Wenn die Familie weniger zahlt als die Freunde (
familie < freunde), gibDie Familie zahlt wenigeraus.