- 1 Section
- 10 Lessons
- unbegrenzt
- Python Grundlagen10
- 1.1Python-Grundlagen: Installation, REPL, erstes Skript
- 1.2Variablen, Datentypen, Typumwandlung
- 1.3Kontrollstrukturen: if, elif, else
- 1.4Schleifen: for, while, range
- 1.5Listen, Tupel, Dictionaries, Sets
- 1.6Funktionen: def, Parameter, return
- 1.7Fehlerbehandlung: try-except-finally
- 1.8Strings: Methoden, Formatierung, f-Strings
- 1.9Dateien lesen und schreiben
- 1.10Praxisprojekt: Kleines Python-Programm von A bis Z
Funktionen: def, Parameter, return
Sobald dein Python-Programm mehr als 30-40 Zeilen hat, wirst du anfangen Funktionen zu schreiben. Eine Funktion ist ein wiederverwendbarer Code-Block mit Namen – du schreibst sie einmal, rufst sie beliebig oft auf. Das hat zwei riesige Vorteile: dein Code wird kürzer (kein Copy&Paste mehr) und du kannst komplizierte Aufgaben in kleine verständliche Stücke zerlegen.
Python-Funktionen sind dabei besonders flexibel: Parameter können Default-Werte haben, du kannst sie per Name übergeben statt per Position, eine Funktion kann beliebig viele Argumente nehmen, und Rückgabewerte können auch mehrere Werte gleichzeitig sein. Wer aus Java-Methoden kommt, wird Python-Funktionen als eleganter und kürzer empfinden.
1) Eine Funktion definieren mit def
Funktionen werden mit dem Schlüsselwort def definiert. Danach kommt der Name, runde Klammern mit Parametern, ein Doppelpunkt – und der eingerückte Funktionskörper. Genau wie bei Kontrollstrukturen bestimmt die Einrückung was zum Funktionskörper gehört. Klicke die Teile der Signatur an, um sie zu erkunden:
return f"{gruss}, {name}!"
begruesse("Anna"). Erst beim Aufruf wird der Code drin ausgeführt – die def-Zeile selbst „registriert" die Funktion nur. Anders als in Java brauchst du keine Klassen drumherum: Python-Funktionen können einfach so im Skript stehen.2) return: Werte aus der Funktion zurückgeben
Eine Funktion kann mit return einen Wert zurückgeben – sie endet sofort an dieser Stelle. Wenn kein return da ist, liefert die Funktion automatisch None zurück (Pythons „nichts" – siehe L2):
Eine besondere Python-Eigenschaft: mehrere Werte gleichzeitig zurückgeben. Technisch betrachtet wird daraus ein Tuple, das du beim Aufruf direkt unpacken kannst:
3) Die vier Arten Parameter zu übergeben
Python kennt vier Modi für Parameter. Sie können sogar kombiniert werden – aber für den Anfang reicht es, jede einzeln zu verstehen:
def f(a, b=10, *args, **kwargs) deckt fast alles ab. Die Sternchen-Syntax wirkt erstmal exotisch, ist aber sehr nützlich für flexible APIs – z.B. wenn eine Funktion Optionen an andere Funktionen weitergeben muss.4) Keyword-Arguments in der Praxis
Keyword-Arguments machen Funktionsaufrufe lesbarer. Vergleich: was bedeutet create_user("Anna", 25, True, False, 5)? Keine Ahnung was die letzten drei Werte sollen. Aber:
Sofort klar was passiert. Viele Python-Bibliotheken (z.B. pandas, matplotlib) nutzen das exzessiv. Faustregel: ab 3-4 Parametern oder wenn boolean-Argumente dabei sind, lieber keyword-Arguments verwenden. Bei vielen Default-Werten kannst du gezielt nur einen davon überschreiben:
5) Scope und die LEGB-Regel
Wenn du in einer Funktion eine Variable verwendest, woher weiß Python welche gemeint ist? Python sucht in einer festen Reihenfolge – der LEGB-Regel: Local → Enclosing → Global → Built-in. Stell dir das als geschachtelte Schalen vor:
print). Erste Trefferin gewinnt. Wichtig: Variablen IN der Funktion sind lokal! Eine Funktion kann globale Variablen lesen, aber zum Ändern brauchst du global x – was du fast nie tun solltest. Lieber Werte als Parameter rein, Ergebnis als return raus.6) Docstrings: Dokumentation direkt im Code
Wenn eine Funktion mit einem String startet (in dreifachen Anführungszeichen), wird der zur Dokumentation der Funktion. Tools, IDEs und Hilfsfunktionen können das nutzen. Eine Funktion ohne Docstring ist wie ein Buch ohne Klappentext – schwer zu verwenden:
Docstrings werden auch automatisch von Tools wie pydoc oder Sphinx in HTML-Dokumentation umgewandelt. Bekannte Stile: Google Style (oben gezeigt), NumPy Style, reStructuredText. Wähle einen und bleib konsistent.
7) Lambda – kurze Funktionen ohne Namen
Für ganz kleine Funktionen die du nur einmal brauchst, gibt es Lambda-Ausdrücke – Funktionen in einer Zeile ohne Namen. Sie sind besonders nützlich als Argument für andere Funktionen wie sorted, map, filter:
Lambda ist auf einen einzigen Ausdruck beschränkt – kein return, keine mehrzeilige Logik. Für alles Komplexere lieber ein normales def verwenden. Mehr zu funktionalen Konzepten in K41b – Python Fortgeschritten.
8) Pass-by-Reference – aber mit Twist
Python übergibt Werte „by reference" – aber das wirkt unterschiedlich je nach Datentyp. Listen und Dictionaries können in der Funktion verändert werden und die Änderung ist außen sichtbar. Bei Zahlen, Strings und Tupeln (immutable Typen) hingegen wirken Änderungen nur innen:
Praktische Konsequenz: vorsichtig sein mit Mutable-Default-Werten. def f(items=[]) ist ein berüchtigter Anfänger-Bug – die Liste wird zwischen Aufrufen geteilt! Stattdessen: def f(items=None): if items is None: items = [].
Zusammenfassung
Funktionen mit def name(parameter): + Einrückung. return beendet und liefert Wert (oder mehrere als Tuple); ohne return → None. Parameter-Modi: positional, default (x=10), keyword (f(name=...)), *args für beliebig viele, **kwargs für Keyword-Beliebig. Reihenfolge: positional → default → *args → **kwargs. Scope nach LEGB: Local → Enclosing → Global → Built-in. Docstrings in """...""" direkt nach def. Lambda für Einzeiler. Mutable Argumente (list, dict) sind „geteilt" – immutable (int, str, tuple) wirken nur innen.
