2.17. Підказки типів

Python дозволяє анотувати параметри функцій і значення, що повертаються, інформацією про тип. Анотації ігноруються під час виконання – нічого не перевіряється, нічого не перетворюється на їхній основі – але вони служать документацією для читачів і для IDE.

2.17.1. Синтаксис анотацій

Анотація параметра розміщується після двокрапки. Тип значення, що повертається, розміщується після -> і перед двокрапкою тіла:

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)

Підказки описують, що має передаватися і що буде повернуто. Виклик add("hi", "there") не викидає виняток – Python все одно виконує тіло. Підказки – це контракт, а не перевірка.

Параметр може мати одночасно значення за замовчуванням і анотацію:

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

CPython має багатший синтаксис (Optional, Union, узагальнені типи) через модуль typing, але вони є надто важкими для MicroPython і рідко потрібні для звичайного коду камери.

2.17.2. MicroPython під час виконання

MicroPython розбирає анотації і потім ігнорує їх. На камері немає модуля typing для імпорту; спроба використати Optional[int] або list[int] або не зможе імпортувати, або мовчки поводитиметься як звичайний доступ до атрибута, залежно від збірки мікропрограми.

Використовуйте лише звичайні назви типів (int, float, str, bool, bytes, list, tuple, dict) в анотаціях. Вони нічого не коштують під час виконання і чітко передають намір.

2.17.3. Як IDE їх використовує

IDE читає анотації для роботи підказок, автодоповнення та вбудованих підказок. Функція, анотована як -> int, показує int як тип значення, що повертається, при наведенні курсора на виклик. Параметр, анотований як : str, автодоповнює рядкові методи для аргументу всередині тіла функції.

Це практична вигода від написання анотацій на середовищі виконання, яке їх ігнорує: краща підтримка від редактора без жодних витрат при виконанні скрипта на камері.

2.17.4. Анотації змінних

Анотації для простих присвоєнь працюють так само:

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

Вони також ігноруються під час виконання. Їхнє основне використання – зробити очевидним призначений тип, коли права частина не дає цього зрозуміти – зазвичай, коли початкове значення є заповнювачем, який буде замінено пізніше.