Что такое type hints в Python и как они используются
Что проверяют
Насколько аккуратно вы описываете контракты в питоновском коде, который живёт дольше одного ноутбука. В задачах на данных через функции ходят массивы, датафреймы и словари конфигов, и аннотации это самый дешёвый способ зафиксировать, что именно там ожидается. Проверяют заодно понимание, что Python остаётся динамическим: сама по себе аннотация ничего не проверяет.
Как отвечать
Type hints это аннотации типов аргументов, возвращаемых значений и атрибутов. Интерпретатор их не применяет: читают их люди, редактор и статические анализаторы вроде mypy или pyright. Часть библиотек использует аннотации в рантайме, по ним pydantic и FastAPI строят валидацию, а dataclasses собирают поля.
from collections.abc import Sequence
def scale(values: Sequence[float], factor: float = 1.0) -> list[float]:
return [v * factor for v in values]Скажите, что встроенные дженерики (list[int], dict[str, float], запись с вертикальной чертой для необязательного значения) вытеснили старые List, Dict и Optional из модуля typing. Для данных полезны TypedDict под конфиги, Protocol вместо жёсткой иерархии классов, типы массивов из numpy.typing. Реальная польза появляется, когда проверка типов стоит в CI, иначе аннотации расходятся с кодом за пару спринтов.
Где спотыкаются
Думают, что def f(x: int) защищает от строки на входе. Не защищает: ошибку увидит статический анализатор или pydantic-модель, а обычная функция молча примет что угодно и упадёт на десять кадров ниже по стеку.
Читают Optional[int] как «аргумент можно не передавать». Это про допустимость None в значении, а необязательность даёт значение по умолчанию; два независимых факта регулярно склеивают в один.
Аннотируют датафрейм и считают дело сделанным. Тип не говорит ни о колонках, ни о dtype, а ломаются пайплайны именно там: контракт таблицы описывают отдельно, схемой или проверкой на входе в шаг.