Skip to main content

Typannotationen für Prozeduren und Funktionen

Wie wir gesehen haben, ist ein Parameter einer Funktion oder Prozedur nichts anderes als eine Variable, die als Teil der Funktion oder Prozedur definiert wird, und nur innerhalb der Funktion oder Prozedur sichtbar ist. Deshalb sollte es nicht überraschen, dass wir auch für Parameter Typannotationen hinschreiben können. Wir machen dies genau mit derselben Syntax wie für Variablen:

Das nachfolgende Beispiel illustriert dies:

def printTextNTimes(text: str, n: int):
i = 0
while i < n:
print(text)
i = i + 1

Wie sie sehen, wird der Typ genau wie bei Variablen einfach, durch Doppelpunkt getrennt, hinter den Namen des Parameters geschrieben.

Annotation des Rückgabetyps für Funktionen

Auch für den Rückgabetyp einer Funktion können wir eine Typannotation hinschreiben. Da der Doppelpunkt in der Definition einer Funktion bereits für die Trennung der Parameter von der Funktion verwendet wird, müssen wir hierfür einen anderen Operator verwenden. Wir verwenden hierfür den Pfeil ->.

Das nachfolgende Beispiel illustriert dies:

def square(a : int) -> int:
return a * a

Sie können sich diese Syntax gut merken, indem Sie sich an die Mathematik erinnern. Um anzuzeigen, dass eine Funktion einen Wert von den natürlichen Zahlen in die natürlichen Zahlen abbildet, schreiben wir

f:NNf : \mathbb{N} \rightarrow \mathbb{N}

Der Pfeil \rightarrow zeigt also an, was der Wertebereich der Funktion ist. Genau dies macht auch der Pfeil -> in der Typannotation für den Rückgabetyp der Funktion.

Rückgabetyp None

Prozeduren haben keinen Rückgabewert. Da Funktionen und Prozeduren aber in Python auf die gleiche Art und Weise definiert werden, können wir anhand der Definition nicht unterscheiden, ob eine Funktion einen Rückgabewert hat oder nicht. Um klarzustellen, dass eine Funktion keinen Rückgabewert hat, können wir Prozeduren mit dem Rückgabetyp None annotieren. Dies macht explizit, dass die Funktion keinen Rückgabewert hat und somit eine Prozedur ist.

Wir könnten also die Funktion printTextNTimes auch wie folgt annotieren:

def printTextNTimes(text: str, n: int) -> None:
i = 0
while i < n:
print(text)
i = i + 1

Experimente

Können Sie die folgenden Funktionen korrekt annotieren? Überlegen Sie sich ob es jeweils nur eine eindeutige Lösung, oder verschiedenen Lösungen gibt.

Fragen und Kommentare

Haben Sie Fragen oder Kommentare zu diesem Artikel? Nutzen Sie das Forum und helfen Sie sich und Ihren Mitstudierenden dieses Thema besser zu verstehen.