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.