Direct naar de hoofdinhoud
Module 9 · Les 1 van 433/36 in de cursus~12 min
Modulelessen (1/4)

Typehints: typen annoteren

Typehints (typeannotaties) zijn optionele declaraties die zeggen "deze variabele/parameter heeft type X". Python verifieert ze NIET tijdens runtime: ze zijn voor jou, je editor (automatisch aanvullen!) en tools zoals mypy of pyright die statische typecontrole uitvoeren.

Variabelen annoteren

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

De syntaxis is name: type = value. Zonder waarde is het een pure verklaring:

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

Annotatiefuncties

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)

Syntaxis: param: type voor elke parameter, -> type voor de retournering. Een functie die niets retourneert, gebruikt -> None.

Ingebouwde generieke 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}

Optioneel en Unie

Een waarde die None kan zijn:

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

X | None is de moderne syntaxis (Python 3.10+). Equivalent: Optional[X] van typing. Voor verbindingen van meerdere typen: int | str | float.

typen: handige hulpmiddelen

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 = "niet controleren" (spaarzaam gebruiken).
  • Callable[[arg1, arg2], return] = een functie die deze parameters overneemt en dat type retourneert.

mypy: de typecontrole

Je installeert mypy, voert mypy file.py uit en het vertelt je of de typen in de rij staan:

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

Typen controleren met mypy

De typehints van Python worden tijdens runtime niet afgedwongen door de tolk; ze worden tijdens de uitvoering genegeerd. Om de juistheid van het type te valideren, moet u een externe statische analysetool zoals mypy uitvoeren door de opdracht mypy script.py in uw terminal uit te voeren.

Probeer het zelf

Oefening#python.m9.l1.e1
Pogingen: 0Laden…

Definieer een functie `double(getallen: lijst[int]) -> lijst[int]` die een lijst retourneert waarin elk element vermenigvuldigd is met 2. Roep deze aan met [1, 2, 3] en wijs deze toe aan `r`. Evalueer `r`.

Editor laden…
Toon hint

Gebruik een lijstbegrip of een for-lus.

Oplossing beschikbaar na 3 pogingen

Oefening beoordelen

Oefening#python.m9.l1.e2
Pogingen: 0Laden…

Definieer `first_or_none(items: lijst[int]) -> int | Geen' dat het eerste element retourneert als de lijst niet leeg is, anders Geen. Wijs `a = eerste_of_none([10, 20])` en `b = eerste_of_none([])` toe. Evalueer `(a, b)`.

Editor laden…
Toon hint

`if items` is waar als de lijst NIET leeg is.

Oplossing beschikbaar na 3 pogingen

Extra uitdaging

Oefening#python.m9.l1.e3
Pogingen: 0Laden…

Write a function `double_value(n: int) -> int` that takes an integer, multiplies it by 2, and returns the result. Make sure to specify type hints for both the parameter and the return value. Finally, evaluate `double_value(5)`.

Editor laden…
Toon hint

Gebruik n: int als parameter en -> int na de functiehandtekening.

Oplossing beschikbaar na 3 pogingen