Есть страница, которую я бы выдавал вместе с установщиком Python — Comprehensive Python Cheatsheet. Одна гигантская шпаргалка на весь язык: коллекции, итераторы, декораторы, ООП, файлы, async и основные библиотеки. 38 тысяч звёзд на GitHub и регулярные обновления.
Ценность не в том, что там есть что-то секретное, а в том, что всё в одном месте и с примерами в три строки. Несколько вещей оттуда, которые регулярно забываются:
🔘
🔘
🔘
🔘
🔘
🔘
@zen_of_python
Ценность не в том, что там есть что-то секретное, а в том, что всё в одном месте и с примерами в три строки. Несколько вещей оттуда, которые регулярно забываются:
Counter не только считает, но и сразу выдаёт топ: Counter(words).most_common(3);defaultdict(list) избавляет от проверок if key in dict при группировке;itertools.groupby работает только на отсортированных данных — классическая ловушка;functools.partial замораживает аргументы: basetwo = partial(int, base=2);ChainMap собирает конфиг по приоритету: ChainMap(user_settings, defaults);@dataclass(frozen=True) даёт неизменяемый объект с __eq__ и __hash__ из коробки.@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍5
Pyrefly активно пилят, и по свежему dev-релизу хорошо видно, куда он растёт: за один цикл 250 коммитов от 37 контрибьюторов, и упор сместился на работу в редакторе, а не только на проверку в CI.
Напомню, Pyrefly — это статический анализатор типов, конкурент mypy и pyright, написанный на Rust ради скорости. На недавнем Typing Summit показывали, что хорошо типизированный код заметно поднимает успех ИИ-агентов, так что быстрый чекер с живой обратной связью в IDE сейчас особенно к месту.
Что приехало для редактора:
🔘 автодополнение литералами: если аргумент имеет тип
🔘 рефакторинги «вынести функцию или класс в новый модуль» и «перенести символ в другой файл» с автоматическим переписыванием импортов;
🔘 навигация по pytest-фикстурам: от использования фикстуры можно прыгнуть к её определению;
🔘 новый LSP-endpoint
🔘 команда
А вы уже пробуете быстрые чекеры на Rust или пока остаётесь на mypy?
@zen_of_python
Напомню, Pyrefly — это статический анализатор типов, конкурент mypy и pyright, написанный на Rust ради скорости. На недавнем Typing Summit показывали, что хорошо типизированный код заметно поднимает успех ИИ-агентов, так что быстрый чекер с живой обратной связью в IDE сейчас особенно к месту.
Что приехало для редактора:
Literal["a", "b"], редактор предложит ровно эти значения;getExpectedType: редактор спрашивает у чекера, какой тип ожидается в текущей позиции, и подсказывает точнее;pyrefly coverage check показывает, насколько код покрыт аннотациями типов.А вы уже пробуете быстрые чекеры на Rust или пока остаётесь на mypy?
@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3🆒2
scikit-learn выпустил 1.9.0, и впервые у библиотеки появился человеческий способ заглянуть внутрь долгого обучения.
Главное — экспериментальный API колбэков. Раньше
🔘
🔘
Что ещё в релизе:
🔘
🔘 конфиг
🔘 HTML-репр обученной модели теперь показывает не только параметры, но и fitted-атрибуты;
🔘 под капотом перешли на
Колбэки — та фича, которой не хватало годами: видеть, что многочасовой
@zen_of_python
Главное — экспериментальный API колбэков. Раньше
fit был чёрным ящиком: запустил и ждёшь. Теперь на estimator можно повесить колбэки через set_callbacks():ProgressBar рисует прогресс обучения прямо в Jupyter или терминале;ScoringMonitor следит за метрикой по ходу обучения, а не только в самом конце.Что ещё в релизе:
metric_at_thresholds сразу считает метрики бинарной классификации по сетке порогов, без ручного перебора;sparse_interface переводит трансформеры на sparse arrays вместо устаревших sparse matrices;narwhals — библиотека лучше дружит с разными датафреймами, не только с pandas.Колбэки — та фича, которой не хватало годами: видеть, что многочасовой
fit реально движется, а не завис. Уже обновились или пока сидите на проверенной версии?@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5🔥3👍1
Matplotlib выпустил 3.11.0, и главная новость — полностью переписанная работа с текстом и шрифтами.
Теперь рендеринг текста идёт через HarfBuzz, FreeType и libraqm. На практике это значит, что подписи на нелатинских письменностях (арабский, иврит, индийские шрифты, сложные лигатуры) наконец отрисовываются правильно, а не рассыпаются. Заодно подключились современные возможности шрифтов.
Что ещё приехало:
🔘 метод
🔘 размеры фигуры можно задавать в
🔘
🔘 отдельный
🔘 встроенные палитры Okabe-Ito и Petroff, дружелюбные к дальтоникам;
🔘 улучшения 3D-графиков и интерактивности.
Группированные бар-чарты и нормальная интернационализация подписей — то, вокруг чего годами городили костыли. А вы что чаще рисуете в Matplotlib?
@zen_of_python
Теперь рендеринг текста идёт через HarfBuzz, FreeType и libraqm. На практике это значит, что подписи на нелатинских письменностях (арабский, иврит, индийские шрифты, сложные лигатуры) наконец отрисовываются правильно, а не рассыпаются. Заодно подключились современные возможности шрифтов.
Что ещё приехало:
grouped_bar() — группированные столбчатые диаграммы из коробки, без ручной возни со смещениями;px и cm, а не только в дюймах;pie_label для подписей на круговых диаграммах;hatchcolor — цвет штриховки независимо от цвета контура;Группированные бар-чарты и нормальная интернационализация подписей — то, вокруг чего годами городили костыли. А вы что чаще рисуете в Matplotlib?
@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4❤2👌1
aiohttp выпустил 3.14.0 — крупный минорный релиз асинхронного HTTP-клиента и сервера. Упор на типобезопасность и быструю работу с JSON.
Что внутри:
🔘 типобезопасные ключи контекста
🔘 работа с JSON прямо в байтах:
🔘 в WebSocket появился
🔘
🔘 cleanup-контексты приложения теперь умеют асинхронные менеджеры контекста.
Если держите сервисы на aiohttp, апгрейд бесплатно даёт и более строгие типы, и меньше накладных расходов на JSON под нагрузкой.
@zen_of_python
Что внутри:
RequestKey и ResponseKey вместо строковых ключей в request[...] — промах по типу теперь ловит чекер, а не прод;json_bytes_response и send_json_bytes отдают уже сериализованные байты, без лишнего прохода через строку;decode_text — получить TEXT-фрейм сразу как bytes и скормить его, например, orjson;encode_basic_auth для аккуратной сборки заголовка Basic-аутентификации;Если держите сервисы на aiohttp, апгрейд бесплатно даёт и более строгие типы, и меньше накладных расходов на JSON под нагрузкой.
@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
Появился PEP 835, который предлагает сократить запись
PEP предлагает оператор
Та же
Детали из предложения:
🔘
🔘 цепочка
🔘 под капотом появляется встроенный тип
🔘 старая форма
Сокращение нацелено на Python 3.16, до этого его можно будет пробовать через
@zen_of_python
Annotated. Если пишете на Pydantic, FastAPI, Typer или SQLModel, вы видели это каждый день:id: Annotated[int, Field(gt=0)]
name: Annotated[str, Field(min_length=3)]
PEP предлагает оператор
@ для метаданных типа:id: int @ Field(gt=0)
name: str @ Field(min_length=3)
Та же
Annotated, просто запись короче.Детали из предложения:
@ связывает сильнее, чем |: запись int | str @ Meta читается как int | Annotated[str, Meta], а для объединения с метаданными нужны скобки (int | str) @ Meta;T @ m1 @ m2 разворачивается в плоскую Annotated[T, m1, m2], без вложенности;types.AnnotatedType на C, а typing.Annotated станет ссылкой на него;Annotated[X, Y] никуда не денется, остаётся для совместимости.Сокращение нацелено на Python 3.16, до этого его можно будет пробовать через
typing_extensions.@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18❤1
FastAPI выкатил два релиза подряд, 0.137.0 и 0.138.0, и оба меняют привычные вещи. Самое заметное снаружи появилось в 0.138.0: метод
Теперь собранный фронтенд раздаётся прямо из FastAPI, без отдельного nginx или статик-сервера:
Кладёте билд SPA в
Под капотом в 0.137.0 переписали то, как роутеры включаются друг в друга:
🔘 раньше
🔘 теперь исходные объекты
🔘 из-за этого маршруты можно добавлять в подроутер уже после
🔘 в части случаев это ещё и экономит память.
Здесь же спрятан ломающий момент: если ваш код ходил по
@zen_of_python
app.frontend().Теперь собранный фронтенд раздаётся прямо из FastAPI, без отдельного nginx или статик-сервера:
app.frontend("/", directory="dist")Кладёте билд SPA в
dist, одна строка, и приложение само отдаёт его на корне. Есть и router.frontend() для поддерева.Под капотом в 0.137.0 переписали то, как роутеры включаются друг в друга:
include_router() клонировал каждый путь в один плоский список, и в итоге на всё приложение оставался один роутер;APIRouter и APIRoute сохраняются, а router.routes стал деревом промежуточных объектов;include_router(), изменения подхватятся, потому что роуты не копируются;Здесь же спрятан ломающий момент: если ваш код ходил по
router.routes как по плоскому списку APIRoute, он сломается, теперь это дерево. Для таких сценариев в 0.137.2 добавили iter_route_contexts().@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8❤🔥2
Forwarded from Представляешь,
На python.org можно было войти как админ с любым API-ключом
Если в API python.org подсунуть имя администратора и произвольный ключ, система пропускала запрос с правами администратора. Никакого перебора, никакой магии — просто имя пользователя и левый ключ.
При этом атакующий не мог переписать сами файлы, но мог поменять URL для скачивания каждого релиза и ссылки на проверочные материалы Sigstore и PGP. Python Insider пишет, что баг пролежал в коде с 2014 года. Корпоративный перевод: «мы не трогаем бинари, мы только подменяем, куда вы их качаете».
Команда безопасности Python получила отчёт 23 февраля и закрыла уязвимость менее чем за 48 часов. Артефакты проверили по подписям, следов вмешательства не нашли. Сайт уже пропатчен.
Если в API python.org подсунуть имя администратора и произвольный ключ, система пропускала запрос с правами администратора. Никакого перебора, никакой магии — просто имя пользователя и левый ключ.
При этом атакующий не мог переписать сами файлы, но мог поменять URL для скачивания каждого релиза и ссылки на проверочные материалы Sigstore и PGP. Python Insider пишет, что баг пролежал в коде с 2014 года. Корпоративный перевод: «мы не трогаем бинари, мы только подменяем, куда вы их качаете».
Команда безопасности Python получила отчёт 23 февраля и закрыла уязвимость менее чем за 48 часов. Артефакты проверили по подписям, следов вмешательства не нашли. Сайт уже пропатчен.
👀1🆒1
Виктор Стиннер, один из ключевых разработчиков CPython, разобрал в блоге, как устроен
Зачем такой маленький? В режиме без GIL блокировка нужна на каждый объект отдельно: свой замок у каждого
Что показали замеры. Дизайн взят из WebKit, у их движка есть
🔘 Linux x86-64:
🔘 macOS arm64: 13 нс против 18 нс, в 1,4 раза;
🔘 Windows x86-64: 13 нс против 38 нс, в 2,9 раза.
Оговорка для авторов C-расширений: напрямую
@zen_of_python
PyMutex, замок размером в один байт, на котором держится free-threaded Python.Зачем такой маленький? В режиме без GIL блокировка нужна на каждый объект отдельно: свой замок у каждого
dict, list, set. Старый замок через py_recursivelock_t занимает 72 байта. Для сравнения, пустой список в Python 3.13 весит 56 байт, пустой словарь 64. Вешать по 72 байта на каждый объект невозможно. PyMutex решает это: один байт, из которого реально используются два бита под состояния (свободен, занят, занят с ожидающими потоками).Что показали замеры. Дизайн взят из WebKit, у их движка есть
WTF::Lock, а под капотом лежит _PyParkingLot, кроссплатформенный аналог futex. На захвате и освобождении без конкуренции:PyMutex 11 нс против 44 нс у старого замка, в 4 раза быстрее;Оговорка для авторов C-расширений: напрямую
PyMutex использовать не стоит, легко словить взаимоблокировку. Для защиты доступа к объектам есть critical section API, Py_BEGIN_CRITICAL_SECTION(obj).@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤3
time.sleep() — не везде правильный способ подождатьВ синхронном скрипте
time.sleep(2.5) идиоматичен: пауза в текущем потоке, никаких сюрпризов. Но в отдельном потоке ту же паузу не прервать по сигналу: лучше threading.Event().wait(), который просыпается по event.set().В асинхронном коде
time.sleep() заморозит весь event loop, потому что корутина не уступает управление. Правильный инструмент: await asyncio.sleep(), он приостанавливает только текущую задачу. В гайде ещё про декоратор retry, rate limit и паузы в GUI через
root.after().👍10
Отправка почты из Python: stdlib, локальный SMTP и сторонние библиотеки
В стандартной библиотеке Python для работы с почтой есть пакет
Явное лучше неявного, но ручная сборка писем со временем утомляет. Статья разбирает сторонние инструменты вроде Yagmail и transactional email-сервисов, чтобы вы могли выбрать между «всё под контролем» и готовым решением.
Кому полезно: тем, кто отправляет уведомления, рассылки или отчёты из Python и хочет сравнить подходы.
В стандартной библиотеке Python для работы с почтой есть пакет
email и модуль для SMTP-соединений: формируете сообщение, добавляете вложения и адресатов, подключаетесь к серверу и отправляете. Для отладки удобно поднять локальный SMTP-сервер — письма не уйдут в интернет, но вы увидите, как они собираются.Явное лучше неявного, но ручная сборка писем со временем утомляет. Статья разбирает сторонние инструменты вроде Yagmail и transactional email-сервисов, чтобы вы могли выбрать между «всё под контролем» и готовым решением.
Кому полезно: тем, кто отправляет уведомления, рассылки или отчёты из Python и хочет сравнить подходы.
👌3❤1
Forwarded from Инструменты программиста
Pathway — Python-фреймворк для потоковой обработки данных на Rust-движке
Pathway даёт писать на Python пайплайны реального времени: чтение из источника, преобразования, запись в приёмник, а тяжёлая часть считается Rust-движком. Тот же код работает и на пакетных данных, и на бесконечном потоке. Релиз v0.31.1 вышел 12 июня, на GitHub больше 62 тысяч звёзд.
Этот релиз почти целиком про новые коннекторы к базам:
🔘
🔘
🔘
🔘 расширили чтение Iceberg, теперь декодируются все примитивные типы, включая
🔘 у коннекторов Postgres добавили набор проверок на старте, чтобы кривая конфигурация падала понятной ошибкой ещё до молчаливой потери строк.
Пригодится дата-инженерам, которые строят аналитику и ETL реального времени и устали склеивать поток из десятка разных коннекторов вручную.
https://github.com/pathwaycom/pathway
Язык: Python и Rust. Лицензия: BSL-1.1.
@prog_tools
Pathway даёт писать на Python пайплайны реального времени: чтение из источника, преобразования, запись в приёмник, а тяжёлая часть считается Rust-движком. Тот же код работает и на пакетных данных, и на бесконечном потоке. Релиз v0.31.1 вышел 12 июня, на GitHub больше 62 тысяч звёзд.
Этот релиз почти целиком про новые коннекторы к базам:
pw.io.elasticsearch.read читает индекс Elasticsearch: своего механизма отслеживания изменений у него нет, поэтому коннектор опрашивает и сверяет пересечение соседних запросов, чтобы ни одна строка не потерялась и не пришла дважды;pw.io.clickhouse.write пишет в ClickHouse по нативному протоколу, в двух режимах: поток изменений с колонками time и diff либо снапшот текущего состояния в ReplacingMergeTree;pw.io.mysql.read делает полноценный захват изменений через бинлог MySQL: сначала снимок таблицы, потом непрерывная доставка вставок, обновлений и удалений;date, time, uuid, fixed и decimal;Пригодится дата-инженерам, которые строят аналитику и ETL реального времени и устали склеивать поток из десятка разных коннекторов вручную.
https://github.com/pathwaycom/pathway
Язык: Python и Rust. Лицензия: BSL-1.1.
@prog_tools
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯1
Где держать Telegram-бота или API, чтобы они не падали под нагрузкой и не съедали бюджет?
Tproger собрал подборку из шести VPS-провайдеров под этот сценарий: от тарифов за пару сотен рублей в месяц до конфигураций с DDR5 и портом 10 Гбит/с. У каждого свой акцент — где-то посуточная оплата и запуск за минуту, где-то API для CI/CD, бэкапы и приватные сети, где-то зарубежные локации.
Внутри по каждому провайдеру: реальные конфигурации, цены, на какой нагрузке тестировали и под какой сценарий брать.
https://tproger.ru/articles/gde-razvernut-bota-ili-api---podborka-vps--kotorye-ne-tormozyat
Tproger собрал подборку из шести VPS-провайдеров под этот сценарий: от тарифов за пару сотен рублей в месяц до конфигураций с DDR5 и портом 10 Гбит/с. У каждого свой акцент — где-то посуточная оплата и запуск за минуту, где-то API для CI/CD, бэкапы и приватные сети, где-то зарубежные локации.
Внутри по каждому провайдеру: реальные конфигурации, цены, на какой нагрузке тестировали и под какой сценарий брать.
https://tproger.ru/articles/gde-razvernut-bota-ili-api---podborka-vps--kotorye-ne-tormozyat
Tproger
Где развернуть бота или API — подборка VPS, которые не тормозят
Мы собрали подборку провайдеров VPS, где можно быстро поднять сервис — от тестового окружения до продакшн-нагрузки.
👍1👏1
Вышла CPython 3.15.0b3 — предпоследняя бета перед заморозкой
23 июня вышла третья из четырёх бета-версий Python 3.15: около 195 правок от 86 контрибьюторов со времён второй беты. Набор фич уже заморожен, дальше только багфиксы и шлифовка. Release candidate назначен на 4 августа, финальный релиз на 1 октября, и команда просит прогнать свой код на бете, чтобы поймать регрессии и поломки ABI заранее.
Что приедет в серии 3.15 по сравнению с 3.14:
🔘 PEP 686: UTF-8 становится кодировкой по умолчанию, открытие файлов без явного
🔘 PEP 810: явные ленивые импорты, модуль грузится при первом обращении, а не на старте программы, это срезает время запуска тяжёлых утилит;
🔘 PEP 814: встроенный тип
🔘 PEP 661: встроенный
🔘 PEP 798: распаковка через
🔘 PEP 799: отдельный пакет для профилирования и Tachyon, высокочастотный статистический сэмплер.
@zen_of_python
23 июня вышла третья из четырёх бета-версий Python 3.15: около 195 правок от 86 контрибьюторов со времён второй беты. Набор фич уже заморожен, дальше только багфиксы и шлифовка. Release candidate назначен на 4 августа, финальный релиз на 1 октября, и команда просит прогнать свой код на бете, чтобы поймать регрессии и поломки ABI заранее.
Что приедет в серии 3.15 по сравнению с 3.14:
encoding больше не зависит от локали системы;frozendict, неизменяемый словарь без сторонних библиотек;sentinel для значений-маркеров вместо самодельных объектов-заглушек;* и ** прямо внутри list- и dict-comprehension;@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤9👏2🤩1
uv 0.11.26 — резолвер зависимостей ускорили сразу с четырёх сторон
uv — быстрый пакетный менеджер и резолвер зависимостей для Python на Rust, замена pip и pip-tools в одном бинарнике. Версия 0.11.26 вышла 30 июня и целиком посвящена скорости резолвинга.
Что ускорили:
🔘 зависимости в PubGrub теперь передаются как ID вместо полных структур, это снижает накладные расходы на каждой итерации резолвера;
🔘 убрали лишние аллокации в ForkMap::contains, структуре, которая проверяет пересечения версий между форками резолвера;
🔘 резолвер стал переиспользовать уже проделанную работу между итерациями PubGrub вместо пересчёта с нуля;
🔘 ускорили выбор кандидата версии для непересекающихся диапазонов зависимостей.
Заодно поправили мелочь: uv теперь предупреждает, если build cache случайно оказался внутри директории с исходниками проекта.
Резолвер зависимостей редко попадает в заголовки, но именно на нём держится ощущение «uv install мгновенный». Вы уже увидели разницу в скорости на своих проектах, или для небольших requirements.txt она и так была незаметна?
@zen_of_python
uv — быстрый пакетный менеджер и резолвер зависимостей для Python на Rust, замена pip и pip-tools в одном бинарнике. Версия 0.11.26 вышла 30 июня и целиком посвящена скорости резолвинга.
Что ускорили:
Заодно поправили мелочь: uv теперь предупреждает, если build cache случайно оказался внутри директории с исходниками проекта.
Резолвер зависимостей редко попадает в заголовки, но именно на нём держится ощущение «uv install мгновенный». Вы уже увидели разницу в скорости на своих проектах, или для небольших requirements.txt она и так была незаметна?
@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
1❤🔥5👻3❤1👍1
Forwarded from Веб-страница
django-scroll-to-top: кнопка «наверх», которая не ломается в проде
Кнопка «наверх» кажется мелочью, пока в проде не всплывают cookie-баннер, чат поддержки, нижняя мобильная навигация и строгий CSP. Автор собрал типовые условия в Django-пакет
Без jQuery, CDN и обязательной сборки. Если JavaScript выключён, остаётся обычная ссылка в начало страницы. Если в ваших Django-проектах кнопку надоело таскать между шаблонами, я бы заглянул в разбор на Tproger.
Кнопка «наверх» кажется мелочью, пока в проде не всплывают cookie-баннер, чат поддержки, нижняя мобильная навигация и строгий CSP. Автор собрал типовые условия в Django-пакет
django-scroll-to-top: один template-тег, Django Admin, настройка цвета и положения через админку без правки шаблонов.Без jQuery, CDN и обязательной сборки. Если JavaScript выключён, остаётся обычная ссылка в начало страницы. Если в ваших Django-проектах кнопку надоело таскать между шаблонами, я бы заглянул в разбор на Tproger.
У Python появится отдельный совет по паковке — назначили даты первых выборов
После того как Steering Council в апреле утвердил PEP 772, PSF объявила даты первых выборов в новый Python Packaging Council: технический орган, который берёт на себя решения по спецификациям совместимости пакетов.
Совет состоит из пяти мест: два кандидата с наибольшим числом голосов получают двухлетний срок, а три оставшихся получают годовой. Голосование пройдёт параллельно с выборами PSF Board 2026.
Даты, если планируете участвовать:
🔘 28 июля: открытие номинаций;
🔘 11 августа: закрытие номинаций;
🔘 13 августа: публикация списка кандидатов;
🔘 25 августа: дедлайн подтверждения намерения голосовать;
🔘 1–15 сентября: само голосование.
Голосовать смогут члены PSF уровня Contributing, Supporting или Fellow, которые заранее подтвердят намерение участвовать.
Управление пакетным хозяйством Python годами было разбросано между pip, PyPA, отдельными PEP и добровольцами-энтузиастами. Кажется ли вам, что выделенный совет реально наведёт порядок, или это ещё один орган для лишних согласований?
@zen_of_python
После того как Steering Council в апреле утвердил PEP 772, PSF объявила даты первых выборов в новый Python Packaging Council: технический орган, который берёт на себя решения по спецификациям совместимости пакетов.
Совет состоит из пяти мест: два кандидата с наибольшим числом голосов получают двухлетний срок, а три оставшихся получают годовой. Голосование пройдёт параллельно с выборами PSF Board 2026.
Даты, если планируете участвовать:
Голосовать смогут члены PSF уровня Contributing, Supporting или Fellow, которые заранее подтвердят намерение участвовать.
Управление пакетным хозяйством Python годами было разбросано между pip, PyPA, отдельными PEP и добровольцами-энтузиастами. Кажется ли вам, что выделенный совет реально наведёт порядок, или это ещё один орган для лишних согласований?
@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
2❤5🙈1
Вышла третья бета Python 3.15 — предпоследняя перед релиз-кандидатом, который намечен на 4 августа. Набор фич зафиксирован, так что уже понятно, что войдёт в релиз:
🔘 ленивые импорты для ускорения старта (PEP 810);
🔘 встроенные типы
🔘 сэмплирующий профайлер Tachyon и отдельный пакет для организации инструментов профилирования (PEP 799);
🔘 распаковка в comprehensions (PEP 798) и UTF-8 как кодировка по умолчанию (PEP 686);
🔘 заметно ускоренный JIT: 8–9% среднего прироста на x86-64 Linux относительно обычного интерпретатора, 12–13% на macOS/AArch64;
🔘 стабильный ABI для free-threaded сборок.
В самой бете 195 исправлений от 86 контрибьюторов, последняя бета выйдет 18 июля. Разработчикам библиотек самое время прогнать тесты на 3.15 и собрать пререлизные wheels.
Уже пробовали 3.15 на своих проектах или ждёте стабильного релиза?
@zen_of_python
frozendict (PEP 814) и sentinel (PEP 661);В самой бете 195 исправлений от 86 контрибьюторов, последняя бета выйдет 18 июля. Разработчикам библиотек самое время прогнать тесты на 3.15 и собрать пререлизные wheels.
Уже пробовали 3.15 на своих проектах или ждёте стабильного релиза?
@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3🔥2🥰1
В Python появится встроенный
Что внутри:
🔘 неизменяемый словарь: попытка присвоить элемент даёт
🔘 хешируемый, если хешируемы все значения, так что его можно класть в
🔘 сохраняет порядок вставки, но сравнение и хеш от порядка не зависят;
🔘 поддерживает объединение через
Главное отличие от
Ждёте
@zen_of_python
frozendict: Steering Council принял PEP 814, и тип уже доступен в бета-версиях Python 3.15. Виктор Стиннер, соавтор PEP, рассказал историю вопроса: его первую попытку, PEP 416, Гвидо отклонил ещё в 2012 году.Что внутри:
TypeError;set и использовать как ключ словаря;| и сравнение с обычным dict.Главное отличие от
types.MappingProxyType в том, что прокси остаётся обёрткой над живым словарём, а frozendict — самостоятельный неизменяемый тип со своим хешем.Ждёте
frozendict в 3.15 или вам хватало MappingProxyType?@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍2