Viele Funktionen tun nicht nur etwas, sondern geben ein Ergebnis zurück, das du weiterverwendest. Der Unterschied zwischen einer Funktion, die etwas ausgibt, und einer, die einen Wert zurückgibt, ist wichtig.
print() vs. return
def addiere_print(a, b):
print(a + b) # gibt das Ergebnis nur aus
def addiere_return(a, b):
return a + b # gibt das Ergebnis zurück
Der Unterschied zeigt sich, wenn du das Ergebnis weiterverwenden möchtest:
# Mit print: Ergebnis geht verloren
addiere_print(3, 5) # zeigt 8 an, aber du kannst es nicht speichern
x = addiere_print(3, 5) # x ist None!
# Mit return: Ergebnis bleibt nutzbar
y = addiere_return(3, 5) # y ist 8
print(y * 2) # 16
Wenn eine Funktion kein return hat (oder nur return ohne Wert), gibt sie automatisch None zurück. None ist Pythons Art zu sagen: "kein Wert".
Rückgabewerte weiterverwenden
Das ist der eigentliche Vorteil von Rückgabewerten — du kannst sie in Berechnungen oder als Argumente für andere Funktionen nutzen:
def quadrat(x):
return x * x
def summe_der_quadrate(a, b):
return quadrat(a) + quadrat(b)
ergebnis = summe_der_quadrate(3, 4) # 9 + 16 = 25
print(ergebnis) # 25
Frühzeitiges Rückgeben
return beendet die Funktion sofort. Du kannst es nutzen, um Randfälle früh abzufangen:
def dividiere(a, b):
if b == 0:
return "Fehler: Division durch Null nicht möglich"
return a / b
print(dividiere(10, 2)) # 5.0
print(dividiere(10, 0)) # Fehler: Division durch Null nicht möglich
Frühe Rückgaben für Fehler oder Sonderfälle am Anfang der Funktion zu platzieren, macht den Hauptcode der Funktion leichter lesbar. Dieser Stil wird "Guard Clause" (Wächterklausel) genannt.
Mehrere Werte zurückgeben
Python erlaubt es, mehrere Werte gleichzeitig zurückzugeben:
def min_max(zahlen):
return min(zahlen), max(zahlen)
kleinste, groesste = min_max([3, 1, 7, 4, 9, 2])
print(f"Kleinste: {kleinste}, Größte: {groesste}")
# Kleinste: 1, Größte: 9
Technisch gesehen gibt Python ein Tupel zurück, aber du kannst die Werte direkt in separate Variablen entpacken.
Wenn du mehrere Werte zurückgibst und sie in einer einzelnen Variable speicherst, bekommst du ein Tupel: ergebnis = min_max([1, 2, 3]) ergibt (1, 3). Das kann überraschend sein, wenn du nur einen Wert erwartest.
Vollständiges Beispiel
def notenberechnung(punkte, max_punkte):
"""Berechnet die Note basierend auf erreichten Punkten."""
prozent = (punkte / max_punkte) * 100
if prozent >= 87:
return 1
elif prozent >= 75:
return 2
elif prozent >= 62:
return 3
elif prozent >= 50:
return 4
elif prozent >= 30:
return 5
else:
return 6
note = notenberechnung(38, 50)
print(f"Deine Note: {note}") # Deine Note: 2
Übungsaufgaben
Was ist der Unterschied zwischen print() und return in einer Funktion?
Antwort anzeigen
Was gibt der folgende Code aus? def doppelt(x): return x * 2 / ergebnis = doppelt(doppelt(3)) / print(ergebnis)