PythonMiddleExperience
Какие версии, возможности или изменения экосистемы Python важно учитывать на собеседованиях в 2026 году?
Ключевые изменения 2024–2026: Python 3.13 с экспериментальным free-threaded режимом (без GIL), uv как замена pip/virtualenv, Ruff вместо flake8+black, Pydantic v2, TaskGroup для asyncio.
Python 3.12 и 3.13 — ключевые изменения
Python 3.12 (октябрь 2023)
- f-string улучшения: многострочные f-строки, вложенные кавычки внутри
{}— больше не нужны промежуточные переменные. - TypeVar с syntax sugar:
type Point[T] = tuple[T, T]вместо громоздкого TypeVar. - @override decorator: явная пометка методов, переопределяющих родительский класс — ловит опечатки в именах.
- Улучшения сообщений об ошибках: Python 3.12 даёт конкретные подсказки типа «Did you forget to call super().__init__()?»
- Perf: 5% прирост в среднем по benchmark suite благодаря специализации инструкций.
# Python 3.12+ type alias syntax
type Vector = list[float]
type Matrix[T] = list[list[T]]
# Старый стиль
from typing import TypeAlias
Vector: TypeAlias = list[float]
Python 3.13 (октябрь 2024)
- Experimental free-threaded build:
python3.13t— сборка без GIL. Включается флагомPYTHON_GIL=0. Пока не production-ready — большинство C-расширений не адаптированы. - Новый REPL: многострочный ввод, подсветка синтаксиса, улучшенная история.
- JIT-компилятор (экспериментальный): copy-and-patch JIT, 1–5% прирост на типичных нагрузках.
- Удалены deprecated API:
distutils(замена:setuptools), несколько модулей из legacy stdlib.
Изменения в экосистеме 2024–2026
- uv (Astral): новый менеджер пакетов на Rust — замена pip + virtualenv + pip-tools. Установка в 10–100x быстрее. В 2025 стал де-факто стандартом для новых проектов.
- Ruff: линтер и форматтер на Rust — замена flake8 + black + isort. Запускается за миллисекунды.
- pyproject.toml как единый конфиг: setup.py и setup.cfg устарели. PEP 517/518/621 — стандарт.
- Pydantic v2: переписан на Rust, в 5–50x быстрее валидации. Breaking changes в API.
- asyncio стал зрелым:
TaskGroup(Python 3.11+) заменяетgatherдля structured concurrency.
# Python 3.11+ TaskGroup — structured concurrency
import asyncio
async def fetch_all(urls: list[str]) -> list[str]:
async with asyncio.TaskGroup() as tg:
tasks = [tg.create_task(fetch(url)) for url in urls]
return [t.result() for t in tasks]
# При ошибке любой задачи — остальные отменяются автоматически
Что устарело и не стоит использовать в новых проектах
distutils— удалён в 3.12setup.py— deprecated, используйтеpyproject.tomlasyncio.coroutinedecorator — удалён в 3.11typing.List,typing.Dict— используйте встроенныеlist[str],dict[str, int](Python 3.9+)
Подводные камни
- Free-threaded Python 3.13 ещё не готов для production: большинство C-расширений (NumPy, pandas) требуют адаптации.
- Pydantic v2 breaking changes:
__fields__→model_fields,.dict()→.model_dump(). Проверьте зависимости перед обновлением. - uv vs poetry: у uv нет полного lockfile с хешами для всех платформ сразу (решается в uv 0.4+).
- match statement (3.10+): не является switch-case из Java; работает через структурный pattern matching — разная семантика.
- Deprecation warnings: игнорирование предупреждений о deprecated API приводит к breaking change при обновлении.
- EOL версии: Python 3.8 — EOL октябрь 2024. Поддержка безопасности прекращена.
What hurts your answer
- Рассказывать устаревший подход как актуальную практику
- Не отличать личный legacy-опыт от состояния экосистемы в 2026 году
- Игнорировать migration notes и deprecated API
What they're listening for
- Понимает актуальное состояние Python
- Отличает современные практики от legacy-подходов
- Учитывает миграции, deprecated API и совместимость