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