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
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:
risultato: int # nessuna assegnazione, solo "annuncio del tipo"Funktionen annotieren
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+)
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:
def trova_utente(id: int) -> str | None:
if id == 1:
return "Ada"
return NoneX | 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
from typing import Any, Callable
def applica(f: Callable[[int], int], x: int) -> int:
return f(x)
valore: Any = "qualunque cosa" # disabilita il checkAny= "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:
$ 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
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`.
Hinweis anzeigen
Verwende eine List Comprehension oder eine for-Schleife.
Lösung nach 3 Versuchen verfügbar
Wiederholungsübung
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)`.
Hinweis anzeigen
`if items` ist wahr, wenn die Liste nicht leer ist.
Lösung nach 3 Versuchen verfügbar
Zusätzliche Herausforderung
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)`.
Hinweis anzeigen
Verwende n: int als Parameter und -> int nach der Funktionssignatur.
Lösung nach 3 Versuchen verfügbar