Eine Funktion ist ein benannter Block von Schritten
Sobald du merkst, dass du dieselben paar Zeilen mehr als einmal schreibst — oder einem kleinen Stück Logik einen Namen geben willst —, bist du bereit, eine Funktion zu schreiben. Funktionen sind das erste echte Werkzeug, um Komplexität in einem Python-Programm zu beherrschen.
Die Grundform:
Zerlegt:
defist das Schlüsselwort, das eine Funktionsdefinition einleitet.greetist der Funktionsname.(name)ist die Parameterliste — die Eingaben, die die Funktion nimmt.- Der Doppelpunkt beendet den Kopf; der eingerückte Block darunter ist der Rumpf.
greet("Ada")ist ein Aufruf. Python führt den Rumpf mitnamegebunden an"Ada"aus.
Funktionen bleiben schlafend, bis sie aufgerufen werden. Sie zu definieren führt sie nicht aus. Sie mit greet("Ada") aufzurufen tut es.
Parameter und Argumente
Das Wort Parameter steht für den Namen in der Funktionsdefinition. Das Wort Argument steht für den Wert, den du beim Aufruf übergibst. Im Alltag kein großes Ding, aber die Unterscheidung hilft beim Lesen von Fehlermeldungen.
Hier sind base und exponent Parameter. 2 und 10 sind Argumente. Python bindet sie der Reihe nach: erstes Argument an ersten Parameter und so weiter.
return: einen Wert zurückgeben
print schreibt auf den Bildschirm. return reicht einen Wert an den Aufrufer, damit der ihn nutzen kann:
Ohne return liefert eine Funktion standardmäßig None:
return verlässt die Funktion auch sofort. Häufig siehst du frühe Rückgaben, um Sonderfälle vor der Hauptlogik abzuhaken:
Frühe Rückgaben verhindern, dass der Hauptkörper tief in if/else verschachtelt ist.
Default-Argumente
Ein Parameter kann einen Default-Wert haben, der genutzt wird, wenn der Aufrufer keinen liefert:
Alle Parameter mit Default müssen nach den Parametern ohne Default stehen. def f(a, b=1, c): ist ein Syntaxfehler.
Die Falle veränderbarer Defaults
Das ist Pythons berühmteste Falle. Sieh:
Du erwartest, dass jeder Aufruf mit einer leeren Liste startet. Stattdessen wird die Default-Liste über die Aufrufe hinweg geteilt, und die Elemente sammeln sich. Python wertet den Default einmal aus, bei der Funktionsdefinition, und nutzt für immer dieselbe Liste.
Das sichere Muster: None als Default und die Liste innerhalb der Funktion erzeugen:
Jetzt bekommt jeder Aufruf, der items nicht übergibt, eine frische Liste. Diese Regel gilt für Listen, Dicts, Sets — alles Veränderbare.
Keyword-Argumente
Du kannst Argumente per Name statt per Position übergeben. Das erlaubt dir, mittlere Parameter zu überspringen und lange Aufrufe lesbarer zu machen:
Positionelle und Keyword-Argumente lassen sich mischen, aber positionelle müssen zuerst kommen:
Sobald eine Funktion mehr als drei oder vier Parameter hat, machen Keyword-Argumente den Aufruf deutlich leichter lesbar.
Positionsgebundene und Keyword-gebundene Parameter
Python erlaubt dir, manche Parameter als nur per Position aufrufbar (mit /) oder nur per Schlüsselwort (mit *) zu markieren:
Am ersten Tag brauchst du das nicht. Es wird nützlich, wenn du APIs entwirfst und festlegen willst, wie Aufrufer deine Funktion nutzen.
Docstrings und Benennung
Die erste Zeile innerhalb einer Funktion kann ein Docstring sein — ein dreifach zitierter String, den Python als Dokumentation behandelt:
Werkzeuge wie help(), IDE-Tooltips und Dokumentationsgeneratoren lesen den Docstring automatisch. Ein Einzeiler ist viel besser als nichts.
Und bitte: denk über Benennung nach.
- Funktionsnamen sollten Verben sein:
fetch_profile,compute_total,is_valid. - Nutz
lower_snake_case. - Boolean-zurückgebende Funktionen beginnen oft mit
is_,has_odercan_.
Ein guter Name macht die Aufrufstelle selbsterklärend, ganz ohne Kommentar.
Reine Funktionen sind leichter zu verstehen
Eine reine Funktion liefert dieselbe Ausgabe für dieselbe Eingabe und hat keine Nebenwirkungen — sie ändert keinen globalen Zustand, schreibt nichts auf stdout (außer zum Debuggen) und nicht in Dateien.
Beide haben ihre Berechtigung, aber in Code, den du wiederverwenden und testen willst, strebe so viele reine Funktionen wie möglich an.
Ein kleines funktionierendes Beispiel
Eine schnelle Funktion, die Defaults, Keyword-Argumente und return kombiniert:
Als Nächstes: flexible Argumentlisten
Manchmal weißt du nicht, mit wie vielen Argumenten eine Funktion aufgerufen wird — oder du willst ankommende Argumente an eine andere Funktion weiterreichen. Dafür gibt es *args und **kwargs. Das ist die nächste Seite.
Häufig gestellte Fragen
Wie definiere ich eine Funktion in Python?
Nutz das Schlüsselwort def, gefolgt vom Funktionsnamen, Klammern für die Parameter und einem Doppelpunkt. Der eingerückte Block darunter ist der Funktionsrumpf. Beispiel: def greet(name): print(f'Hi, {name}').
Was macht return in Python?
return gibt einen Wert an den Aufrufer zurück. Eine Funktion ohne explizites return liefert automatisch None. Sobald return läuft, verlässt die Funktion sofort — Code dahinter im selben Block wird übersprungen.
Was sind Default-Argumente in Python?
Default-Argumente geben einem Parameter einen voreingestellten Wert, der benutzt wird, wenn der Aufrufer keinen liefert. def greet(name='friend'): heißt: greet() ohne Argumente nutzt 'friend'. Nutze niemals veränderbare Defaults wie [] — siehe unten für das sichere Muster.