Mediumtyping

Что такое typing模块 (List, Dict, Optional)?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

typing — модуль с type constructs для аннотаций. Эффективен с mypy/pyright для статического анализа.

from typing import Optional, Union, Callable, TypeVar, Generic, Literal, TypedDict

# С Python 3.9 можно использовать builtins как generics
def first(items: list[int]) -> int: ...
scores: dict[str, int] = {}

# Optional/Union (в 3.10+ — int | None, int | str)
def find(key: str) -> Optional[int]: ...

# TypeVar — generic параметр
T = TypeVar('T')
def first(items: list[T]) -> T: ...

# Callable
handler: Callable[[int], str] = lambda x: str(x)

# Literal — конкретное значение
mode: Literal['r', 'w', 'a'] = 'r'

# TypedDict — dict с фиксированными ключами
class UserDict(TypedDict):
    name: str
    age: int
  • Protocol — structural typing (duck typing для mypy);
  • cast(T, x) — runtime no-op для type checker; @overload — multiple signatures;
  • reveal_type(x) — debug в mypy.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.