2.17. Type hints¶
Python laat je functieparameters en retourwaarden annoteren met type-informatie. De annotaties worden tijdens runtime genegeerd – niets controleert ze, niets converteert op basis ervan – maar ze dienen als documentatie voor lezers en voor de IDE.
2.17.1. Annotatiesyntaxis¶
Een parameterannotatie komt na een dubbele punt. Het retourtype komt na -> en vóór de dubbele punt van de body:
def greet(name: str) -> None:
print("hello,", name)
def add(a: int, b: int) -> int:
return a + b
def average(values: list) -> float:
return sum(values) / len(values)
De hints beschrijven wat er zou moeten worden doorgegeven en wat er zal worden geretourneerd. Het aanroepen van add("hi", "there") veroorzaakt geen fout – Python voert de body toch uit. De hints zijn een contract, geen controle.
Een parameter kan zowel een standaardwaarde als een annotatie hebben:
def greet(name: str, greeting: str = "hello") -> None:
print(greeting, name)
CPython heeft rijkere notatie (Optional, Union, generics) via de typing-module, maar die zijn zwaar op MicroPython en zelden nodig voor alledaagse cameracode.
2.17.2. MicroPython tijdens runtime¶
MicroPython parseert annotaties en negeert ze vervolgens. Er is geen typing-module om van te importeren op de camera; het proberen te gebruiken van Optional[int] of list[int] zal ofwel mislukken bij het importeren ofwel stilzwijgend zich gedragen als gewone attribuuttoegang, afhankelijk van de firmware-build.
Houd het bij gewone typenamen (int, float, str, bool, bytes, list, tuple, dict) in annotaties. Ze kosten niets tijdens runtime en brengen de bedoeling duidelijk over.
2.17.3. Hoe de IDE ze gebruikt¶
De IDE leest annotaties om tooltips, autocomplete en inline hints aan te sturen. Een functie geannoteerd met -> int toont int als retourtype wanneer de cursor over de aanroep zweeft. Een parameter geannoteerd met : str autocompletet string-methoden op het argument binnen de functie-body.
Dit is de praktische opbrengst van het schrijven van annotaties op een runtime die ze negeert: betere ondersteuning vanuit de editor zonder enige kosten wanneer het script op de camera draait.
2.17.4. Variabele-annotaties¶
Annotaties op gewone toewijzingen werken op dezelfde manier:
threshold: float = 0.5
name: str = "OpenMV"
Ook deze worden tijdens runtime genegeerd. Het belangrijkste gebruik ervan is het duidelijk maken van het bedoelde type wanneer de rechterkant dat niet duidelijk maakt – doorgaans wanneer de initiële waarde een plaatshouder is die later wordt vervangen.