Direkt zum Hauptinhalt springen
eLearner.app
Modul 9 · Lektion 1 von 433/36 im Kurs~12 min
Lektionen des Moduls (1/4)

Type Hints: Typanmerkungen

Type-Hints (Typannotationen) sind optionale Deklarationen, die besagen: "Diese Variable/dieser Parameter hat den Typ X". Python überprüft sie nicht zur Laufzeit: Sie sind für dich, deinen Editor (Autovervollständigung!) und Tools wie mypy oder pyright, die eine statische Typprüfung durchführen.

Variablen annotieren

Python
nome: str = "Ada"
anni: int = 36
attivo: bool = True
prezzi: list[float] = [1.2, 3.4]

Die Syntax lautet name: type = value. Ohne einen Wert ist es eine reine Deklaration:

Python
risultato: int  # nessuna assegnazione, solo "annuncio del tipo"

Funktionen annotieren

Python
def saluta(nome: str, urlante: bool = False) -> str:
    s = f"Ciao {nome}"
    return s.upper() if urlante else s

def somma(numeri: list[int]) -> int:
    return sum(numeri)

Syntax: param: type für jeden Parameter, -> type für die Rückgabe. Eine Funktion, die nichts zurückgibt, verwendet -> None.

Integrierte generische Typen (Python 3.9+)

Python
nomi: list[str] = ["a", "b"]
mappa: dict[str, int] = {"x": 1}
coppia: tuple[int, str] = (1, "ok")
unici: set[int] = {1, 2, 3}

Optional und Union

Ein Wert, der None sein kann:

Python
def trova_utente(id: int) -> str | None:
    if id == 1:
        return "Ada"
    return None

X | None ist die moderne Syntax (Python 3.10+). Äquivalent: Optional[X] aus typing. Für Union-Typen aus mehreren Typen: int | str | float.

typing: Nützliche Werkzeuge

Python
from typing import Any, Callable

def applica(f: Callable[[int], int], x: int) -> int:
    return f(x)

valore: Any = "qualunque cosa"  # disabilita il check
  • Any = "nicht prüfen" (sparsam verwenden).
  • Callable[[arg1, arg2], return] = eine Funktion, die diese Parameter entgegennimmt und diesen Typ zurückgibt.

mypy: Der Typ-Checker

Du installierst mypy, führst mypy datei.py aus und es sagt dir, ob die Typen übereinstimmen:

Bash
$ mypy script.py
script.py:5: error: Argument 1 to "somma" has incompatible type "str"; expected "int"

Typen mit mypy überprüfen

Pythons Type-Hints werden vom Interpreter zur Laufzeit nicht erzwungen; sie werden während der Ausführung ignoriert. Um die Typkorrektheit zu validieren, musst du ein externes statisches Analysetool wie mypy ausführen, indem du den Befehl mypy script.py in deinem Terminal eingibst.

Probiere es aus

Übung#python.m9.l1.e1
Versuche: 0Wird geladen…

Definiere eine Funktion `double(numbers: list[int]) -> list[int]`, die eine Liste zurückgibt, in der jedes Element mit 2 multipliziert ist. Rufe sie mit [1, 2, 3] auf und weise das Ergebnis `r` zu. Evaluiere `r`.

Editor wird geladen…
Hinweis anzeigen

Verwende eine List Comprehension oder eine for-Schleife.

Lösung nach 3 Versuchen verfügbar

Wiederholungsübung

Übung#python.m9.l1.e2
Versuche: 0Wird geladen…

Definiere `first_or_none(items: list[int]) -> int | None`, die das erste Element zurückgibt, wenn die Liste nicht leer ist, andernfalls None. Weise `a = first_or_none([10, 20])` und `b = first_or_none([])` zu. Evaluiere `(a, b)`.

Editor wird geladen…
Hinweis anzeigen

`if items` ist wahr, wenn die Liste nicht leer ist.

Lösung nach 3 Versuchen verfügbar

Zusätzliche Herausforderung

Übung#python.m9.l1.e3
Versuche: 0Wird geladen…

Schreibe eine Funktion `double_value(n: int) -> int`, die eine Ganzzahl entgegennimmt, sie mit 2 multipliziert und das Ergebnis zurückgibt. Achte darauf, Type-Hints sowohl für den Parameter als auch für den Rückgabewert anzugeben. Evaluiere schließlich `double_value(5)`.

Editor wird geladen…
Hinweis anzeigen

Verwende n: int als Parameter und -> int nach der Funktionssignatur.

Lösung nach 3 Versuchen verfügbar