⚡️ Python 3.15: lazy import, распаковка в comprehension и сэмплирующий профилировщик
Вышел Python 3.15, и три вещи в нём стоит попробовать на этой неделе. Первая — PEP 810: lazy import json и lazy from pathlib import Path загружают модуль при первом обращении. Мотивация у Саймона Уиллисона из его LLM CLI: плагины, импортирующие sentence_transformers, добавляли несколько секунд к каждому запуску — типичная боль любого Python-CLI с тяжёлым ML-стеком.
Вторая — PEP 798, распаковка внутри comprehension: [*L for L in lists], {*s for s in sets}, {**d for d in dicts}. Больше не нужен itertools.chain, чтобы сплющить список списков. Третья — профилирование: cProfile переименован в profiling.tracing, а рядом появился сэмплирующий профилировщик Tachyon в profiling.sampling с flame graph, heat map и экспортом в формат Firefox Profiler; к живому процессу он цепляется через python -m profiling.sampling attach PID (на macOS потребовался sudo).
По скорости, по замерам Мигеля Гринберга на rc3, 3.15 примерно равен 3.14; экспериментальный JIT дал 1.2x на Фибоначчи. Заодно 3.10 ушёл в EOL — библиотекам теперь можно опираться на tomllib, asyncio.TaskGroup и timeout(), datetime.UTC. Ставится через uv python install 3.15, и 3.15.0 уже есть в actions/python-versions.
👉🏻 Канал | 💬 Чат | 📕 Каталог
Вышел Python 3.15, и три вещи в нём стоит попробовать на этой неделе. Первая — PEP 810: lazy import json и lazy from pathlib import Path загружают модуль при первом обращении. Мотивация у Саймона Уиллисона из его LLM CLI: плагины, импортирующие sentence_transformers, добавляли несколько секунд к каждому запуску — типичная боль любого Python-CLI с тяжёлым ML-стеком.
Вторая — PEP 798, распаковка внутри comprehension: [*L for L in lists], {*s for s in sets}, {**d for d in dicts}. Больше не нужен itertools.chain, чтобы сплющить список списков. Третья — профилирование: cProfile переименован в profiling.tracing, а рядом появился сэмплирующий профилировщик Tachyon в profiling.sampling с flame graph, heat map и экспортом в формат Firefox Profiler; к живому процессу он цепляется через python -m profiling.sampling attach PID (на macOS потребовался sudo).
По скорости, по замерам Мигеля Гринберга на rc3, 3.15 примерно равен 3.14; экспериментальный JIT дал 1.2x на Фибоначчи. Заодно 3.10 ушёл в EOL — библиотекам теперь можно опираться на tomllib, asyncio.TaskGroup и timeout(), datetime.UTC. Ставится через uv python install 3.15, и 3.15.0 уже есть в actions/python-versions.
👉🏻 Канал | 💬 Чат | 📕 Каталог
Simon Willison’s Weblog
Hello Python 3.15, goodbye 3.10, and now I can use 3.11
Python 3.15 is here! Here’s the essential What’s new in Python 3.15 guide, this year curated by 3.14 and 3.15 release manager Hugo van Kemenade. As someone who builds open …