ch
Feedback
Zen of Python

Zen of Python

前往频道在 Telegram

Полный Дзен Пайтона в одном канале Разместить рекламу: @tproger_sales_bot Правила общения: https://tprg.ru/rules Другие каналы: @tproger_channels Сайт: https://tprg.ru/site Регистрация в перечне РКН: https://tprg.ru/xZOL

显示更多

📈 Telegram 频道 Zen of Python 的分析概览

频道 Zen of Python (@zen_of_python) 俄语 语言赛道中的 是活跃参与者。目前社区聚集了 18 952 名订阅者,在 技术与应用 类别中位列第 6 826,并在 俄罗斯 地区排名第 34 989

📊 受众指标与增长动态

невідомо 创建以来,项目保持高速增长,吸引了 18 952 名订阅者。

根据 25 八月, 2026 的最新数据,频道保持稳定运转。过去 30 天订阅人数变化为 -164,过去 24 小时变化为 -9,整体触达仍然可观。

  • 认证状态: 未认证
  • 互动率 (ER): 平均受众互动率为 11.07%。内容发布后 24 小时内通常能获得 6.35% 的反应,占订阅者总量。
  • 帖子覆盖: 每篇帖子平均可获得 2 099 次浏览,首日通常累积 1 204 次浏览。
  • 互动与反馈: 受众积极参与,单帖平均反应数为 6
  • 主题关注点: 内容集中在 github, rust, pip, api, install 等核心主题上。

📝 描述与内容策略

作者将该频道定位为表达主观观点的平台:
Полный Дзен Пайтона в одном канале Разместить рекламу: @tproger_sales_bot Правила общения: https://tprg.ru/rules Другие каналы: @tproger_channels Сайт: https://tprg.ru/site Регистрация в перечне РКН: https://tprg.ru/xZOL

凭借高频更新(最新数据采集于 26 八月, 2026),频道始终保持新鲜度与高覆盖。分析显示受众积极互动,使其成为 技术与应用 类别中的关键影响点。

18 952
订阅者
-924 小时
-517
-16430
吸引订阅者
八月 '26
八月 '26
+44
在4个频道中
七月 '26
+46
在5个频道中
Get PRO
六月 '26
+120
在2个频道中
Get PRO
五月 '26
+124
在0个频道中
Get PRO
四月 '26
+84
在1个频道中
Get PRO
三月 '26
+74
在3个频道中
Get PRO
二月 '26
+75
在9个频道中
Get PRO
一月 '26
+136
在1个频道中
Get PRO
十二月 '25
+140
在5个频道中
Get PRO
十一月 '25
+158
在5个频道中
Get PRO
十月 '25
+258
在7个频道中
Get PRO
九月 '25
+143
在1个频道中
Get PRO
八月 '25
+180
在3个频道中
Get PRO
七月 '25
+248
在4个频道中
Get PRO
六月 '25
+208
在6个频道中
Get PRO
五月 '25
+214
在4个频道中
Get PRO
四月 '25
+189
在2个频道中
Get PRO
三月 '25
+175
在6个频道中
Get PRO
二月 '25
+134
在5个频道中
Get PRO
一月 '25
+89
在3个频道中
Get PRO
十二月 '24
+92
在1个频道中
Get PRO
十一月 '24
+137
在6个频道中
Get PRO
十月 '24
+95
在4个频道中
Get PRO
九月 '24
+102
在3个频道中
Get PRO
八月 '24
+98
在1个频道中
Get PRO
七月 '24
+82
在3个频道中
Get PRO
六月 '24
+67
在1个频道中
Get PRO
五月 '24
+95
在0个频道中
Get PRO
四月 '24
+148
在0个频道中
Get PRO
三月 '24
+107
在1个频道中
Get PRO
二月 '24
+116
在4个频道中
Get PRO
一月 '24
+109
在1个频道中
Get PRO
十二月 '23
+123
在6个频道中
Get PRO
十一月 '23
+103
在2个频道中
Get PRO
十月 '23
+140
在5个频道中
Get PRO
九月 '23
+91
在0个频道中
Get PRO
八月 '23
+218
在0个频道中
Get PRO
七月 '23
+211
在0个频道中
Get PRO
六月 '23
+159
在0个频道中
Get PRO
五月 '23
+292
在0个频道中
Get PRO
四月 '23
+193
在0个频道中
Get PRO
三月 '23
+194
在0个频道中
Get PRO
二月 '23
+316
在0个频道中
Get PRO
一月 '23
+424
在0个频道中
Get PRO
十二月 '22
+522
在0个频道中
Get PRO
十一月 '22
+454
在0个频道中
Get PRO
十月 '22
+257
在0个频道中
Get PRO
九月 '22
+638
在0个频道中
Get PRO
八月 '22
+750
在0个频道中
Get PRO
七月 '22
+745
在0个频道中
Get PRO
六月 '22
+1 008
在0个频道中
Get PRO
五月 '22
+622
在0个频道中
Get PRO
四月 '22
+1 260
在0个频道中
Get PRO
三月 '22
+975
在0个频道中
Get PRO
二月 '22
+1 947
在0个频道中
Get PRO
一月 '22
+597
在0个频道中
Get PRO
十二月 '21
+203
在0个频道中
Get PRO
十一月 '21
+1 278
在0个频道中
Get PRO
十月 '21
+2 258
在0个频道中
Get PRO
九月 '21
+376
在0个频道中
Get PRO
八月 '21
+766
在0个频道中
Get PRO
七月 '21
+1 065
在0个频道中
Get PRO
六月 '21
+737
在0个频道中
Get PRO
五月 '21
+132
在0个频道中
Get PRO
四月 '21
+2 962
在0个频道中
Get PRO
三月 '21
+1 825
在0个频道中
Get PRO
二月 '21
+613
在0个频道中
Get PRO
一月 '21
+3 216
在0个频道中
Get PRO
十二月 '20
+7 337
在0个频道中
日期
订阅者增长
提及
频道
26 八月+3
25 八月0
24 八月+2
23 八月+7
22 八月+1
21 八月0
20 八月+3
19 八月+1
18 八月+5
17 八月+1
16 八月+2
15 八月0
14 八月0
13 八月+2
12 八月+1
11 八月+2
10 八月+2
09 八月+2
08 八月0
07 八月0
06 八月+1
05 八月+2
04 八月+2
03 八月+1
02 八月+1
01 八月+3
频道帖子
Встречайте новую мини-игру — «Отпуск». За несколько шагов нужно подготовить героя к поездке: навести порядок, разобрать вещи,
Встречайте новую мини-игру — «Отпуск». За несколько шагов нужно подготовить героя к поездке: навести порядок, разобрать вещи, отыскать билет и упаковать чемодан. Отдельный этап — отпускной гардероб, и тут всё непросто. Простое управление, короткие уровни, юмор. Отличный способ отвлечься на пару минут между задачами и заодно поймать промокоды от партнёров! Попробовать: https://tprg.ru/H2cI

2
Михаил Суриков собрал конвейер, который берёт сгенерированный моделью код на Python, ищет в нём уязвимости, чинит и проверяет заново. Сканируют параллельно CodeQL и Bandit, отдельная модель-валидатор смотрит своим взглядом, находки обогащаются техниками MITRE ATT&CK и примерами CWE, после чего другая модель пишет исправление. Проверяли на 26 промптах из LLMSecEval, девяти категориях CWE и четырёх моделях Claude — всего 80 прогонов. Если валидатору дополнительно показать находки CodeQL и Bandit, число срабатываний статических анализаторов падает на 29–69% против 9–54% без этого. Интересного тут два. Во-первых, само исправление в 15–22% случаев заносит новую уязвимость, и примерно в 70% таких случаев это ровно одна новая находка. Во-вторых, лучшая модель-генератор не дала лучший результат в конвейере: меньше всего остаточных находок и выше процент успешных починок оказались у Sonnet 4.6, а не у Opus 4.8. @zen_of_python
670
3
CPython официально поддерживает RISC-V. Стан Ульбрих объявил об этом 24 августа в Python Insider: архитектура добавлена в PEP 11 как платформа третьего уровня. RISC-V — открытая архитектура набора команд: в отличие от x86 и ARM, её может реализовать кто угодно. В записи ссылаются на прогноз, по которому экосистема вырастет вчетверо к 2032 году. Держится всё на живом железе: несколько машин RISC-V передал проект RISE, на них крутятся боты сборки. Автор благодарит Людовика Анри из RISE, Фуркана Ондера и Эмму Смит, а свою работу вёл при поддержке Sovereign Tech Agency. Что дальше. Боты сборки запускаются уже после слияния патча, поэтому команда разбирается, как завести RISC-V прямо в CI CPython — через инициативу RISE RISC-V Runners. В долгую цель — второй уровень поддержки и оптимизации под саму архитектуру. Отдельно просят тех, у кого есть железо: собрать CPython, прогнать свои задачи и тесты и рассказать, что сломалось. @zen_of_python
892
4
pip 26.2 стал учитывать Cache-Control индекса, и это первое, что заметят пользователи: только что опубликованный пакет может не появиться сразу, если между вами и PyPI кэширующий прокси. Для принудительного обновления есть --refresh-package. Релиз вышел 29 июля, 26.2.1 — 4 августа. 🔘 PIP_CONSTRAINT больше не влияет на изолированные сборочные окружения; для них появились --build-constraint и PIP_BUILD_CONSTRAINT; 🔘 экспериментальный режим venv-isolation запускает сборку в обычных virtualenv вместо временных окружений; 🔘 добавлены поддержка Python 3.15, self-referential extras, флаг --only-deps и поле upload-time в pylock.toml; 🔘 закрыты утечка системных пакетов в изолированную сборку на 3.15, несовпадение метаданных PEP 658, symlink traversal в tar-архивах и CVE-2026-13346; 🔘 26.2.1 вернул использование keyring из неактивированного virtualenv. @zen_of_python
983
5
Starlette научился сжимать большие ответы вне event loop. В релизах с 1.4.0 по 1.6.0, вышедших 5 и 8 августа, переделан GZipMiddleware и подтянута защита FileResponse. 🔘 тела от 128 КиБ сжимаются в рабочем потоке, а не в цикле событий; вместо GzipFile используется zlib.compressobj, и компрессор создаётся лениво; 🔘 потоковые ответы получают flush на каждом чанке, частичные ответы (206) больше не сжимаются; 🔘 FileResponse отклоняет перевёрнутый однобайтовый Range и ограничивает число диапазонов сотней; 🔘 в 1.6.0 появился max_body_size и поддержка расширения http.response.debug. Starlette лежит под FastAPI, так что изменение задевает и его. Полный список правок по версиям в release notes. @zen_of_python
1 133
6
⚡️ Тестовое собеседование на Middle Python с разработчиком из Яндекса завтра вечером Уже завтра вечером в 19:00 по МСК приход
⚡️ Тестовое собеседование на Middle Python с разработчиком из Яндекса завтра вечером Уже завтра вечером в 19:00 по МСК приходите на открытое онлайн-собеседование, чтобы посмотреть на настоящее интервью на Middle Python-разработчика. Как это будет: 🔘 Хачатур — старший разработчик в Яндексе — будет задавать реальные вопросы и задачи разработчику-добровольцу; 🔘 Хачатур будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью; 🔘 В конце можно будет задать любой вопрос Хачатуру. Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Python-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы. Переходите в нашего бота, чтобы получить ссылку на эфир → @shortcut_py_bot Реклама. О рекламодателе.
1 156
7
В асинхронных генераторах появится yield from. PEP 828 принят 3 августа, целевая версия — Python 3.16. Сейчас делегировать другому асинхронному генератору можно только циклом async for с ручным yield. Это прячет намерение, ломает связь asend(), athrow() и aclose() с вызывающей стороной и не даёт вернуть значение: приходится бросать исключение. 🔘 result = yield from agenerator() делегирует aiter(), anext(), asend(), athrow() и aclose(); 🔘 return 3 внутри асинхронного генератора становится законным, значение приезжает через новый атрибут StopAsyncIteration.value, по аналогии со StopIteration.value; 🔘 компилятор перестаёт выдавать SyntaxError на return с значением и yield from в async def с yield. PEP 525 в 2016 году отказался от этого из-за сложности реализации; автор нового PEP Питер Бирма считает, что нынешний код CPython это позволяет, и приложил рабочую реализацию. Вариант async yield from отвергли ради симметрии с обычными генераторами, и в тексте прямо сказано, что переключение контекста без явного await — спорное место. @zen_of_python
1 158
8
Правила типизации Python рассыпаны по десяткам PEP и страницам документации, а два разных проверяющих на одном коде дают разные ответы. Андрей Наку и Дорел Лукану попробовали собрать это в одну модель. Отправная точка: каждый тип в Python представлен классом, класс задаёт абстрактный тип данных, а такой тип описывается в терминах экзистенциальных типов. Дальше авторы разводят три отношения, которые в разговорах обычно смешивают: быть подклассом, быть экземпляром объекта и быть экземпляром типа. По дороге разбираются вещи, полезные и без формализма: 🔘 почему объединение типов и классов в Python 2.2 и переход к порядку разрешения методов C3 в 2.3 определили нынешнее поведение множественного наследования; 🔘 чем Protocol отличается от абстрактного базового класса и где проходит граница между проверкой во время выполнения и статической; 🔘 как устроен слой метаклассов, где класс одновременно и шаблон для экземпляров, и обычное значение; 🔘 чем расходятся mypy и Pyright: первый сильнее опирается на аннотации и знание стандартной библиотеки, второй заточен под быстрый статический анализ. Авторы честно ограничивают область: формализм описывает программы, где типы не меняются на ходу, а подтипизация и динамика оставлены на будущее. @zen_of_python
1 162
9
Тесты бэкенда PyPI шли 163 секунды, стали 30 — при том что самих тестов стало больше: было около 3900, стало больше 4700. Але
Тесты бэкенда PyPI шли 163 секунды, стали 30 — при том что самих тестов стало больше: было около 3900, стало больше 4700. Алексис Шалланд описал, что именно сделали. Порядок действий подойдёт любому медленному набору на pytest: 🔘 распараллелить через pytest-xdist с --numprocesses=auto; на 32 ядрах замер упал с 191 до 63 секунд; 🔘 чтобы процессы не топтали данные друг друга, фикстура базы берёт идентификатор рабочего процесса: у каждого своя база tests-{worker_id}; 🔘 для покрытия в параллельном режиме добавить sitecustomize.py с coverage.process_startup(); 🔘 переключить измерение покрытия на механизм наблюдения из Python 3.12 через COVERAGE_CORE=sysmon — с 58 до 27 секунд; 🔘 указать testpaths: сбор тестов ускорился с 7,84 до 2,60 секунды; 🔘 прогнать python -X importtime и выкинуть лишний импорт. Логику тестов при этом не меняли и покрытие не снижали. @zen_of_python
1 249
10
Ромен Моротти разобрал профилировщиком, куда уходит время `pip install`, и довёл установку до двукратного ускорения, а скачив
Ромен Моротти разобрал профилировщиком, куда уходит время `pip install`, и довёл установку до двукратного ускорения, а скачивание — до семикратного. На картинке тот самый профиль в SnakeViz. 🔘 создание каталогов при установке одного пакета вызывалось 14 425 раз; осталось 1 538; 🔘 набор поддерживаемых меток колёс, 889 значений, пересчитывался заново для каждого пакета — кэширование дало около 17 процентов; 🔘 функция получения установленного пакета вела себя квадратично: на трёхстах пакетах итоговая сводка занимала треть времени; 🔘 распаковка читала архив мелкими кусками, блок в 1 мебибайт дал ещё около 10 процентов; 🔘 библиотека запросов тянула сеть кусками по 10 килобайт: переход к 256 килобайтам поднял скорость с 60 до 260 мегабайт в секунду; 🔘 отрисовка полосы прогресса съедала до 30 процентов времени загрузки. Поучительна и судьба правок: исправление двойного сброса на диск, а это 7 процентов, не приняли из-за разного поведения файловых систем. @zen_of_python
1 240
11
Почему obj.prop вызывает функцию, а C.prop возвращает объект, и откуда метод знает про self Антонио Куни разобрал по шагам, ч
Почему obj.prop вызывает функцию, а C.prop возвращает объект, и откуда метод знает про self Антонио Куни разобрал по шагам, что происходит при обращении к атрибуту — от байткода до кода CPython. Порядок поиска на картинке. Из него сразу объясняется несколько загадок. Дескриптор данных, то есть объект с __get__ и __set__, проверяется раньше словаря экземпляра — поэтому property не перекрыть, положив одноимённый ключ в obj.__dict__. И property остаётся дескриптором данных, даже когда сеттера нет: он определяет __set__ и сам поднимает AttributeError. Там же видно, откуда берётся связанный метод: обычная функция — это дескриптор без записи, и obj.meth разворачивается в C.meth.__get__(obj, C). У классов поиск устроен иначе: сначала дескрипторы данных метакласса, потом полный проход по порядку разрешения методов. Автор берёт CPython 3.12.11: в 3.13 этот код усложнён оптимизациями. @zen_of_python
1 209
12
Дескрипторы — та часть объектной модели Python, которую большинство использует каждый день, не зная названия. Официальное руководство Раймонда Хеттингера объясняет её по шагам и остаётся живой документацией, а не архивом. Протокол состоит из трёх методов: __get__, __set__ и __delete__. Класс, реализующий их, перехватывает доступ к атрибуту. Из этого собрано больше, чем кажется: 🔘 property, staticmethod, classmethod и super() — всё это дескрипторы, и в руководстве показаны их упрощённые реализации на Python; 🔘 обычная функция становится связанным методом ровно потому, что функция — тоже дескриптор; 🔘 __set_name__ позволяет дескриптору узнать имя атрибута, под которым его объявили; 🔘 разница между дескрипторами с записью и без определяет, кто победит: дескриптор или словарь экземпляра; 🔘 на этом же построены __slots__ и модели в ORM. Практическая часть — готовый класс Validator и валидаторы OneOf, Number и String: проверка типов и диапазонов при присваивании, без единой строчки проверок в коде, который этими полями пользуется. @zen_of_python
1 222
13
Марк Шеннон и Даниэле Пармеджани опубликовали PEP 805 «Safe Parallel Python»: параллелизм в CPython без гонок по умолчанию. Ц
Марк Шеннон и Даниэле Пармеджани опубликовали PEP 805 «Safe Parallel Python»: параллелизм в CPython без гонок по умолчанию. Целевая версия 3.16, статус Draft. 🔘 Каждый объект получает атрибут __shareable__ только на чтение, со значением Immutable, Local, Protected или Synchronized. Контролируется доступ к объекту, а не отдельные операции: проверка нужна лишь при создании ссылки потока из ссылки в куче. 🔘 Классы, функции и модули создаются Local. Замыкание, меняющее nonlocal, останется Local, и передача его в чужую группу потоков даст IllegalThreadAccessException. 🔘 Добавляются SynchronizedList, SynchronizedDict и SynchronizedSet; sys.modules станет первым, sys.path — вторым. Авторы предупреждают: эти классы защищают объект от порчи, но потокобезопасности не дают. 🔘 Мотив: PEP 703 даёт параллелизм, но допускает гонки, а PEP 734 безопасен, но объекты между интерпретаторами без копирования не передать. Без чего-то подобного, считают авторы, две сборки CPython останутся навсегда. @zen_of_python
1 304
14
PEP 842 предлагает ключевое слово export и прячет из модуля всё, что им не помечено Питер Бирма опубликовал черновик 25 июля, целевая версия — Python 3.16. Идея в том, чтобы у модуля появился явный публичный интерфейс, а не соглашение об именах с подчёркиванием и переменная __all__, о которой знает только импорт со звёздочкой. 🔘 объявление помечается прямо в определении: export class Public видно снаружи, а обычный class Private из dir(module) исчезает; 🔘 при обращении к скрытому имени поднимается ExportError, наследник AttributeError; 🔘 переменная __export__ со списком строк работает как список экспорта, а имена в ней могут быть ещё не определены, но тогда импорт со звёздочкой упадёт; 🔘 запись from module export NAME равносильна импорту имени с последующим его экспортом; 🔘 export перед def и class разрешён только на уровне модуля, внутри функции это синтаксическая ошибка; 🔘 слово мягкое, то есть существующий код с переменной по имени export продолжит работать, а модули без __export__ ведут себя как раньше. Автор сам подчёркивает, что это не модификатор доступа: ограничение обходится удалением __export__, правкой списка или обращением к __dict__ модуля. Смысл не в защите, а в том, чтобы автодополнение, документация и статический анализ видели границу библиотеки так же, как её видит автор. В обсуждении сразу поднялся вопрос производительности: эталонная реализация пока не оптимизирована и, вероятно, добавляет накладные расходы на обращение к атрибутам модуля. Открытым остаётся и то, как пакет должен добираться до приватных имён собственных подмодулей. Пока это черновик, и до 3.16 у предложения ещё есть время измениться. Обсуждение предложения @zen_of_python
1 210
15
Дэвид Бизли пишет с нуля живьём на сцене, за 46 минут проходя весь путь от простого сокета до собственного цикла событий. Слайдов почти нет, только редактор и терминал. Последовательность такая. Берётся заведомо тяжёлая функция — рекурсивные числа Фибоначчи — и простой сетевой сервис. Сначала он последовательный, и один клиент блокирует всех остальных. Дальше появляются потоки: они спасают там, где программа ждёт ввод-вывод, но на вычислениях упираются в глобальную блокировку интерпретатора. Затем процессный пул, который блокировку обходит, но платит за это сериализацией и передачей данных. Самая ценная часть в конце. Бизли показывает, что генератор с yield — это способ задачи добровольно приостановиться, и из этого прямо на глазах собирает планировщик с очередью задач, а потом цикл событий с select, ожиданием и пробуждением через пару сокетов. После этого asyncio перестаёт быть магией: видно, из каких частей он состоит и почему устроен именно так. @zen_of_python
1 397
16
Создаём программу, которая сама умеет выбирать модели в зависимости от задачи Чем дольше работаешь с ИИ, тем больше убеждаешь
Создаём программу, которая сама умеет выбирать модели в зависимости от задачи Чем дольше работаешь с ИИ, тем больше убеждаешься, что под разные задачи нужны разные модели. Дя простых задач не нужна дорогая модель, а со сложной дешевая может не справиться. А ещё, используя только одну модель, вы рискуете получить кирпич, если эта модель вдруг станет недоступна. Выход — разделить запросы по сложности и держать под рукой запасной вариант. Сначала ваш скрипт решает, насколько труден вопрос, потом отправляет простое к дешёвой модели, а сложное — к мощной. При сбое переключается на резервную модель. Туториал разбирает это на Python шаг за шагом. #python
1 450
17
uv 0.12.5 поменял правило выбора интерпретатора: при одинаковом приоритете теперь предпочитается более новая версия и стандартный вариант Python. Если в конфигурации несколько интерпретаторов с равным приоритетом, окружение может собраться уже не тем Python, что вчера. 🔘 подтянуты CPython 3.10.21, 3.11.16 и 3.12.14; 🔘 в preview у --index и --default-index появился выбор настроенного индекса по имени; 🔘 экспорт SBOM в CycloneDX по умолчанию содержит URL и хеши артефактов; 🔘 cache-physical-space откатывается к логическому размеру файла там, где физический размер файловая система не отдаёт; 🔘 в скриптах по PEP 723 относительные пути к индексам разрешаются относительно каталога скрипта, а не текущего каталога. Выбор индекса по имени авторы помечают как preview. Численных бенчмарков в заметках к релизу нет. @zen_of_python
1 429
18
PyPI перестал принимать новые файлы в релизы старше четырнадцати дней Сет Ларсон описал это изменение 22 июля. Правило простое: если версия пакета опубликована больше двух недель назад, добавить в неё новый файл больше нельзя. Цель — закрыть сценарий, при котором давно стабильную версию тихо дополняют после угона токена или доступа к сборочному процессу. Подтверждённых злоупотреблений на момент публикации не было. 🔘 обсуждение началось ещё вокруг PEP 740 в январе 2024 года и вернулось в марте 2026-го после компрометации двух проектов; 🔘 исправление влили 8 июля 2026 года; 🔘 главное возражение бытовое: проекты иногда докладывают колёса для новой версии Python в уже выпущенный релиз; 🔘 масштаб возражения измерили: среди 15 тысяч самых популярных пакетов так поступили только 56 проектов, добавив совместимое с CPython 3.14 колесо позже чем через две недели; 🔘 на профильной встрече в рамках PyCon US 2026 сочли приемлемым требование выпускать под новый Python новую версию пакета; 🔘 автор просит пока не закладываться на это правило как на гарантию: семантика закрытого релиза и соответствующий интерфейс ещё не определены. Окончательная модель должна приехать вместе с новым протоколом загрузки и предварительными релизами, после стандартизации PEP 694. Так что практический вывод для авторов пакетов такой: план поддержки нового CPython теперь придётся строить через выпуск новой версии, а не через дозагрузку колеса в старую. @zen_of_python
1 503
19
Numba 0.67.0 научилась работать с NumPy 2.5 и собирает пакеты для Python 3.14 и Windows ARM64. 🔘 у np.sum и np.cumsum появился динамический axis, ось теперь можно вычислять во время выполнения; 🔘 добавлена JIT-поддержка np.insert, пока без аргумента axis; 🔘 np.random.binomial в RandomState переключается с BINV на BTPE, когда n * min(p, 1 - p) > 30, поток случайных чисел при этом сохраняется; 🔘 анализ живости переменных перевели на топологический порядок, а проверка принадлежности стеку в _find_back_edges стала за O(1); 🔘 сборки через pycc теперь могут быть побайтно воспроизводимыми на Linux и macOS. Из ломающего: np.row_stack и двумерное векторное произведение убраны вслед за NumPy 2.5, cross2d остаётся только для старых версий. Пакеты под Windows ARM64 на старте ограничены Python 3.14, часть тестов там пропущена из-за проблемы в LLVM 22. Отдельно починили тихую ошибку компиляции при повторном присваивании нелокальной переменной во вложенной функции: раньше генерировался неверный код, теперь вылетает UnsupportedError. Численного бенчмарка ускорения BTPE авторы не приводят. @zen_of_python
1 482
20
Двадцать пять минут, которые снимают половину вопросов новичка: доклад Неда Бэтчелдера «Facts and Myths about Python names and values» с PyCon US 2015. Весь доклад отвечает на один вопрос: что происходит, когда вы пишете x = 23. Ответ — не «в переменную кладётся значение», а «имя привязывается к объекту». Из этого простого сдвига вырастает объяснение почти всех классических непоняток: 🔘 почему Python нельзя описать ни как передачу по значению, ни как передачу по ссылке; 🔘 почему два имени могут указывать на один объект и менять его вместе; 🔘 почему присваивание никогда не копирует объект; 🔘 почему += для списка и для числа ведут себя по-разному; 🔘 почему изменяемый аргумент по умолчанию живёт между вызовами; 🔘 почему аргументы функции, атрибуты объекта и переменная цикла — это всё одна и та же операция связывания имени. Бэтчелдер разбирает это на диаграммах с коробочками и стрелками, без единой строчки про внутренности интерпретатора. Именно поэтому доклад одиннадцатилетней давности не устарел ни на строчку: семантика имён и объектов с тех пор не менялась. @zen_of_python
1 488