2.17. Tipovi naznaka (type hints)

Python vam omogućuje da anotirate parametre funkcije i povratne vrijednosti informacijama o tipu. Anotacije se ignoriraju u vrijeme izvođenja – ništa ih ne provjerava, ništa ne pretvara na temelju njih – ali služe kao dokumentacija čitateljima i IDE-u.

2.17.1. Sintaksa anotacija

Anotacija parametra ide iza dvotočke. Povratni tip ide iza -> i prije dvotočke tijela:

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)

Naznake opisuju što se treba proslijediti i što će se vratiti. Poziv add("hi", "there") ne podiže iznimku – Python ipak izvršava tijelo. Naznake su ugovor, a ne provjera.

Parametar može imati i zadanu vrijednost i anotaciju:

def greet(name: str, greeting: str = "hello") -> None:
    print(greeting, name)

CPython ima bogatiju notaciju (Optional, Union, generike) kroz modul typing, ali to je preglomazno na MicroPythonu i rijetko potrebno za svakodnevni kod kamere.

2.17.2. MicroPython u vrijeme izvođenja

MicroPython parsira anotacije, a zatim ih ignorira. Na kameri ne postoji modul typing za uvoz; pokušaj korištenja Optional[int] ili list[int] ili neće uspjeti pri uvozu ili će se tiho ponašati kao obični pristup atributu, ovisno o buildu firmwarea.

Držite se običnih naziva tipova (int, float, str, bool, bytes, list, tuple, dict) u anotacijama. Ne koštaju ništa u vrijeme izvođenja i jasno prenose namjeru.

2.17.3. Kako ih IDE koristi

IDE čita anotacije kako bi pogonio skočne opise, automatsko dovršavanje i ugrađene naznake. Funkcija anotirana s -> int prikazuje int kao svoj povratni tip kada se pokazivač zadrži na pozivu. Parametar anotiran s : str automatski dovršava metode niza znakova na argumentu unutar tijela funkcije.

Ovo je praktična dobit pisanja anotacija na izvedbenom okruženju koje ih ignorira: bolja podrška iz uređivača bez ikakvog troška kada se skripta izvodi na kameri.

2.17.4. Anotacije varijabli

Anotacije na običnim dodjelama funkcioniraju na isti način:

threshold: float = 0.5
name: str = "OpenMV"

I one se ignoriraju u vrijeme izvođenja. Njihova je glavna uporaba činjenje namjeravanog tipa očiglednim kada ga desna strana ne čini očiglednim – obično kada je početna vrijednost rezervirano mjesto koje će kasnije biti zamijenjeno.