2.17. Wskazówki typów¶
Python pozwala adnotować parametry funkcji i wartości zwracane informacją o typie. Adnotacje są ignorowane w czasie wykonania – nic ich nie sprawdza, nic nie konwertuje na ich podstawie – ale służą jako dokumentacja dla czytających oraz dla IDE.
2.17.1. Składnia adnotacji¶
Adnotacja parametru znajduje się po dwukropku. Typ zwracany znajduje się po -> i przed dwukropkiem ciała:
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)
Wskazówki opisują, co powinno zostać przekazane i co zostanie zwrócone. Wywołanie add("hi", "there") nie zgłasza błędu – Python i tak uruchamia ciało. Wskazówki są kontraktem, a nie kontrolą.
Parametr może mieć zarówno wartość domyślną, jak i adnotację:
def greet(name: str, greeting: str = "hello") -> None:
print(greeting, name)
CPython ma bogatszą notację (Optional, Union, typy generyczne) poprzez moduł typing, ale są one ciężkie na MicroPython i rzadko potrzebne w codziennym kodzie kamery.
2.17.2. MicroPython w czasie wykonania¶
MicroPython parsuje adnotacje, a następnie je ignoruje. Na kamerze nie ma modułu typing do zaimportowania; próba użycia Optional[int] lub list[int] albo nie powiedzie się przy imporcie, albo po cichu zachowa się jak zwykły dostęp do atrybutu, w zależności od kompilacji oprogramowania układowego.
W adnotacjach trzymaj się zwykłych nazw typów (int, float, str, bool, bytes, list, tuple, dict). Nic nie kosztują w czasie wykonania i jasno przekazują intencję.
2.17.3. Jak używa ich IDE¶
IDE odczytuje adnotacje, aby zasilać dymki, autouzupełnianie i wskazówki w linii. Funkcja z adnotacją -> int pokazuje int jako swój typ zwracany, gdy kursor najedzie na wywołanie. Parametr z adnotacją : str autouzupełnia metody łańcuchowe na argumencie wewnątrz ciała funkcji.
To praktyczna korzyść z pisania adnotacji w środowisku uruchomieniowym, które je ignoruje: lepsze wsparcie ze strony edytora bez żadnego kosztu, gdy skrypt działa na kamerze.
2.17.4. Adnotacje zmiennych¶
Adnotacje na zwykłych przypisaniach działają w ten sam sposób:
threshold: float = 0.5
name: str = "OpenMV"
Te również są ignorowane w czasie wykonania. Ich głównym zastosowaniem jest uwidocznienie zamierzonego typu, gdy prawa strona go nie ukazuje – zwykle wtedy, gdy wartość początkowa jest symbolem zastępczym, który zostanie później zastąpiony.