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"
Вони також ігноруються під час виконання. Їхнє основне використання – зробити очевидним призначений тип, коли права частина не дає цього зрозуміти – зазвичай, коли початкове значення є заповнювачем, який буде замінено пізніше.