TGViewer
Zen of Python Zen of Python @zen_of_python · 18.8K subscribers
Post #5003 931
Как точно типизировать *args и **kwargs в Python

Запись *args: tuple[int, str] выглядит как тип всего кортежа, но проверщик читает её иначе: каждый позиционный аргумент должен быть таким кортежем. У **kwargs: dict[...] тип также относится к каждому именованному аргументу. Типизатор здесь не телепат.

Для разнородных аргументов нужен Unpack: Unpack[tuple[int, str]] задаёт типы и порядок позиционных аргументов. Именованные описываются через TypedDict и Unpack[Kw], поэтому проверщик знает тип каждого ключа.

В разборе аннотаций показаны и необязательные ключи: все сразу через total=False либо отдельные через NotRequired. До Python 3.12 эти типы берутся из typing_extensions. Подход пригодится обёрткам, которые передают аргументы функции с той же сигнатурой.
  • 👍 1
More from @zen_of_python
  1. Sep 23, 2026Pyodide разрешил публиковать WASM-колёса прямо в PyPI В Pyodide 314.0 появилась прямая пуб…
  2. Sep 22, 2026Как применять структурное сопоставление с образцом к деревьям в Python Структурное сопоста…
  3. Sep 22, 2026Почему в Python стоит подменять свой интерфейс, а не httpx Если бизнес-тест напрямую подме…
  4. Sep 21, 2026Как точечно сравнивать скорость функций Python с tprof Профилировщик помогает найти медлен…
  5. Sep 21, 2026Как писать Python-скрипты, которые удобно запускать в пайплайнах В разборе Bite code! собр…
  6. Sep 21, 2026Как упаковать Go-бинарник в wheel и подключить к Python PyPI может раздавать не только Pyt…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →