Voraussetzungen
Du kennst die Inhalte aus Teil 11 und arbeitest mit einem lokalen Python-3-Interpreter (ab Python 3.10), beispielsweise in Thonny.
Das lernst du in dieser Lektion
- Def und return verwenden.
- Parameter und Argumente unterscheiden.
- Lokale Variablen verstehen.
Eine Berechnung bekommt einen Namen
Wir möchten den Materialbedarf an mehreren Stellen berechnen. Eine Funktion bündelt diese Aufgabe:
def berechne_bedarf(anzahl, gewicht_pro_teil_g):
bedarf_g = anzahl * gewicht_pro_teil_g
return bedarf_g
ergebnis = berechne_bedarf(4, 18.5)
print(f"Bedarf: {ergebnis:.1f} g")
Speichere funktionen.py. def beginnt die Definition. Die Namen in den Klammern sind Parameter. Beim Aufruf sind 4 und 18.5 die übergebenen Argumente. Der eingerückte Körper läuft erst beim Aufruf, nicht schon bei der Definition.
return ist keine Bildschirmausgabe
return beendet den aktuellen Funktionsaufruf und gibt einen Wert an die aufrufende Stelle zurück. Dadurch kann das Ergebnis gespeichert, weiterverarbeitet oder ausgegeben werden. print() zeigt dagegen etwas an und liefert normalerweise None zurück.
Eine Funktion ohne ausgeführtes return liefert ebenfalls None. Das wird zum Problem, wenn du mit dem vermeintlichen Ergebnis weiterrechnen willst. Halte Rechnen und Ausgeben möglichst auseinander: Eine Berechnungsfunktion gibt eine Zahl zurück; die Oberfläche entscheidet über den Text.
Standardwerte verwenden
def berechne_bedarf(anzahl, gewicht_pro_teil_g, reserve_prozent=0):
faktor = 1 + reserve_prozent / 100
return anzahl * gewicht_pro_teil_g * faktor
print(berechne_bedarf(4, 18.5))
print(berechne_bedarf(4, 18.5, reserve_prozent=10))
Ohne Reserve erhältst du 74.0, mit zehn Prozent Reserve näherungsweise 81.4. Die benannte Übergabe reserve_prozent=10 macht deutlich, wofür die Zahl steht. Ein Standardwert folgt in dieser einfachen Form auf die Parameter ohne Standardwert.
Lokale Variablen
faktor ist innerhalb der Funktion lokal. Die übrigen Programmteile sollen sich nicht darauf verlassen, dass sie auf diesen Namen zugreifen können. Übergib benötigte Werte als Parameter und verwende Rückgabewerte. Das macht den Baustein leichter verständlich und prüfbar.
Kurz dokumentieren und prüfen
Ein String direkt am Anfang einer Funktion ist ein Docstring:
def kosten_eur(gewicht_g, preis_pro_kg):
"""Berechnet die Filamentkosten für ein Gewicht in Gramm."""
return gewicht_g / 1000 * preis_pro_kg
print(kosten_eur(100, 20))
Die Ausgabe muss 2.0 sein. Prüfe Funktionen zuerst mit Werten, deren Ergebnis du leicht von Hand berechnen kannst. Für Gleitkommazahlen ist eine formatierte Ausgabe oder ein Toleranzvergleich sinnvoller als blind auf exakte Gleichheit zu setzen.
Eine Funktion sollte eine klar erkennbare Aufgabe haben. Wenn ihr Name schon „lesen_und_rechnen_und_speichern“ lautet, lohnt sich meistens eine Aufteilung.
Mitmach-Aufgabe
Schreibe rest_nach_druck(rest_g, verbrauch_g). Die Funktion soll den neuen Restwert zurückgeben. Rufe sie mit 750 und 74 auf und gib das Ergebnis außerhalb der Funktion aus.
Versuche die Aufgabe zuerst selbst. Vergleiche danach deinen Ansatz mit der Musterlösung. Andere Lösungen sind möglich, wenn sie dieselben Anforderungen erfüllen.
Musterlösung
def rest_nach_druck(rest_g, verbrauch_g):
"""Zieht den Verbrauch vom vorhandenen Material ab."""
return rest_g - verbrauch_g
neuer_rest_g = rest_nach_druck(750, 74)
print(f"Neuer Rest: {neuer_rest_g} g")
Ergebnis prüfen
Das Ergebnis lautet 676 g. Die Funktion selbst erzeugt keine Ausgabe. Die Prüfung auf zu hohen Verbrauch ergänzen wir beim Abschlussprojekt.
Typische Stolperstellen
Rufe eine Funktion erst auf, nachdem ihre Definition ausgeführt wurde. Code nach einem bedingungslos ausgeführten return ist in diesem Funktionsaufruf nicht erreichbar.
Was du jetzt kannst
- Def und return verwenden.
- Parameter und Argumente unterscheiden.
- Lokale Variablen verstehen.
Passendes Cheatsheet
Zum Nachschlagen: Cheatsheet 09 – Funktionen und Rückgabewerte. Dort findest du auch den vorhandenen PDF-Download.
Im nächsten Teil
In Teil 13 geht es um Fehler verstehen und Eingaben absichern. Lies Fehlermeldungen, fange erwartbare Eingabefehler gezielt ab und untersuche Programme schrittweise.
