es
Feedback

¡No caigas en manos de tramposos! Telemetrio encuentra y marca estos canales 👉 Si quieres ver la etiqueta, suscríbete

Zen of Python

Zen of Python

Ir al canal en Telegram

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

Mostrar más

📈 Análisis del canal de Telegram Zen of Python

El canal Zen of Python (@zen_of_python) en el segmento lingüístico de Ruso es un actor destacado. Actualmente la comunidad reúne a 18 730 suscriptores, ocupando la posición 6 999 en la categoría Tecnologías y Aplicaciones y el puesto 35 209 en la región Rusia.

📊 Métricas de audiencia y dinámica

Desde su creación el невідомо, el proyecto ha mostrado un crecimiento acelerado, reuniendo a 18 730 suscriptores.

Según los últimos datos del 26 octubre, 2026, el canal mantiene una actividad estable. En los últimos 30 días la variación de miembros fue de -87, y en las últimas 24 horas de -8, conservando un alto alcance.

  • Estado de verificación: No verificado
  • Tasa de interacción (ER): El promedio de interacción de la audiencia es 6.18%. Durante las primeras 24 horas tras publicar, el contenido suele obtener 4.24% de reacciones respecto al total de suscriptores.
  • Alcance de las publicaciones: Cada publicación recibe en promedio 1 158 visualizaciones. En el primer día suele acumular 795 visualizaciones.
  • Reacciones e interacción: La audiencia responde de forma activa: el promedio de reacciones por publicación es 1.
  • Intereses temáticos: El contenido se centra en temas clave como github, rust, pip, api, install.

📝 Descripción y política de contenido

El autor describe el recurso como un espacio para expresar opiniones subjetivas:
“Полный Дзен Пайтона в одном канале Разместить рекламу: @tproger_sales_bot Правила общения: https://tprg.ru/rules Другие каналы: @tproger_channels Сайт: https://tprg.ru/site Регистрация в перечне РКН: https://tprg.ru/xZOL”

Gracias a la alta frecuencia de actualizaciones (últimos datos recibidos el 27 octubre, 2026), el canal mantiene la vigencia y un amplio alcance. La analítica demuestra que la audiencia interactúa activamente con el contenido, lo que lo convierte en un punto de referencia dentro de la categoría Tecnologías y Aplicaciones.

18 730
Suscriptores
-824 horas
-367 días
-8730 días
Archivo de publicaciones
Понятное сообщение об ошибке и быстро исправленная ошибка — это не одно и то же. В работе из Делфтского технического универси
Понятное сообщение об ошибке и быстро исправленная ошибка — это не одно и то же. В работе из Делфтского технического университета 103 человека чинили баги в Python: 38 новичков и 65 опытных. Сравнивали три варианта одного и того же сообщения: обычный traceback, короткий совет по делу и развёрнутое объяснение с разбором. Среднее время до исправления — 415,69 секунды у обычного, 324,56 у короткого совета и 423,85 у развёрнутого. По доле починенных багов расклад разошёлся по опыту. У опытных развёрнутое объяснение оказалось лучшим вариантом: 90 процентов против 68 у обычного traceback. У новичков оно же оказалось худшим: 42 процента против 46. Субъективные оценки при этом сдвинулись значимо — переписанные сообщения людям нравятся больше. Объективного выигрыша в отладке авторы не нашли. @zen_of_python

Официальная документация Python теперь доступна на русском — объявили в блоге Python Insider 22 августа. Открывается по адрес
Официальная документация Python теперь доступна на русском — объявили в блоге Python Insider 22 августа. Открывается по адресу docs.python.org/ru/3/ или переключателем языка в шапке любой страницы: туториал, справочник по языку, описание стандартной библиотеки. В записи отдельно напоминают, что переводы держатся на участниках сообщества и отстают от оригинала ровно настолько, насколько их перестают обновлять. Ссылки на руководство для переводчиков и панель со статусом языков — там же. @zen_of_python

Фильтры распаковки tar и data в tarfile создавали каталоги за пределами каталога назначения. Стан из Ирландии завёл issue 18
Фильтры распаковки tar и data в tarfile создавали каталоги за пределами каталога назначения. Стан из Ирландии завёл issue 18 августа, исправление влили в main 19 августа. Имя элемента в архиве вида ../escaped.evil/../dest/sub/file выходит из назначения и возвращается обратно. Проверка контейнмента смотрит на итоговый путь после realpath, а он оказывается внутри dest — значит, элемент считается безопасным. Но промежуточные каталоги создаются по имени как оно записано, и ../escaped.evil появляется снаружи. Правка в Lib/tarfile.py занимает семь строк: если среди компонентов имени есть .., имя прогоняется через os.path.normpath до вычисления целевого пути. В документации к этому сразу добавлена оговорка — нормализация убирает внутренние .., а это меняет смысл имени, если оно проходит через символические ссылки. Запись легла в Misc/NEWS.d/next/Security. Бэкпорты в 3.14, 3.13 и 3.12 влиты, в 3.15, 3.11 и 3.10 пока открыты. @zen_of_python

Встречайте новую мини-игру — «Отпуск». За несколько шагов нужно подготовить героя к поездке: навести порядок, разобрать вещи,
Встречайте новую мини-игру — «Отпуск». За несколько шагов нужно подготовить героя к поездке: навести порядок, разобрать вещи, отыскать билет и упаковать чемодан. Отдельный этап — отпускной гардероб, и тут всё непросто. Простое управление, короткие уровни, юмор. Отличный способ отвлечься на пару минут между задачами и заодно поймать промокоды от партнёров! Попробовать: https://tprg.ru/H2cI

Михаил Суриков собрал конвейер, который берёт сгенерированный моделью код на 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

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

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

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

⚡️ Тестовое собеседование на Middle Python с разработчиком из Яндекса завтра вечером Уже завтра вечером в 19:00 по МСК приход
⚡️ Тестовое собеседование на Middle Python с разработчиком из Яндекса завтра вечером Уже завтра вечером в 19:00 по МСК приходите на открытое онлайн-собеседование, чтобы посмотреть на настоящее интервью на Middle Python-разработчика. Как это будет: 🔘 Хачатур — старший разработчик в Яндексе — будет задавать реальные вопросы и задачи разработчику-добровольцу; 🔘 Хачатур будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью; 🔘 В конце можно будет задать любой вопрос Хачатуру. Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Python-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы. Переходите в нашего бота, чтобы получить ссылку на эфир → @shortcut_py_bot Реклама. О рекламодателе.

В асинхронных генераторах появится 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

Правила типизации Python рассыпаны по десяткам PEP и страницам документации, а два разных проверяющих на одном коде дают разные ответы. Андрей Наку и Дорел Лукану попробовали собрать это в одну модель. Отправная точка: каждый тип в Python представлен классом, класс задаёт абстрактный тип данных, а такой тип описывается в терминах экзистенциальных типов. Дальше авторы разводят три отношения, которые в разговорах обычно смешивают: быть подклассом, быть экземпляром объекта и быть экземпляром типа. По дороге разбираются вещи, полезные и без формализма: 🔘 почему объединение типов и классов в Python 2.2 и переход к порядку разрешения методов C3 в 2.3 определили нынешнее поведение множественного наследования; 🔘 чем Protocol отличается от абстрактного базового класса и где проходит граница между проверкой во время выполнения и статической; 🔘 как устроен слой метаклассов, где класс одновременно и шаблон для экземпляров, и обычное значение; 🔘 чем расходятся mypy и Pyright: первый сильнее опирается на аннотации и знание стандартной библиотеки, второй заточен под быстрый статический анализ. Авторы честно ограничивают область: формализм описывает программы, где типы не меняются на ходу, а подтипизация и динамика оставлены на будущее. @zen_of_python

Тесты бэкенда 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

Ромен Моротти разобрал профилировщиком, куда уходит время `pip install`, и довёл установку до двукратного ускорения, а скачив
Ромен Моротти разобрал профилировщиком, куда уходит время `pip install`, и довёл установку до двукратного ускорения, а скачивание — до семикратного. На картинке тот самый профиль в SnakeViz. 🔘 создание каталогов при установке одного пакета вызывалось 14 425 раз; осталось 1 538; 🔘 набор поддерживаемых меток колёс, 889 значений, пересчитывался заново для каждого пакета — кэширование дало около 17 процентов; 🔘 функция получения установленного пакета вела себя квадратично: на трёхстах пакетах итоговая сводка занимала треть времени; 🔘 распаковка читала архив мелкими кусками, блок в 1 мебибайт дал ещё около 10 процентов; 🔘 библиотека запросов тянула сеть кусками по 10 килобайт: переход к 256 килобайтам поднял скорость с 60 до 260 мегабайт в секунду; 🔘 отрисовка полосы прогресса съедала до 30 процентов времени загрузки. Поучительна и судьба правок: исправление двойного сброса на диск, а это 7 процентов, не приняли из-за разного поведения файловых систем. @zen_of_python

Почему 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

Дескрипторы — та часть объектной модели Python, которую большинство использует каждый день, не зная названия. Официальное руководство Раймонда Хеттингера объясняет её по шагам и остаётся живой документацией, а не архивом. Протокол состоит из трёх методов: __get__, __set__ и __delete__. Класс, реализующий их, перехватывает доступ к атрибуту. Из этого собрано больше, чем кажется: 🔘 property, staticmethod, classmethod и super() — всё это дескрипторы, и в руководстве показаны их упрощённые реализации на Python; 🔘 обычная функция становится связанным методом ровно потому, что функция — тоже дескриптор; 🔘 __set_name__ позволяет дескриптору узнать имя атрибута, под которым его объявили; 🔘 разница между дескрипторами с записью и без определяет, кто победит: дескриптор или словарь экземпляра; 🔘 на этом же построены __slots__ и модели в ORM. Практическая часть — готовый класс Validator и валидаторы OneOf, Number и String: проверка типов и диапазонов при присваивании, без единой строчки проверок в коде, который этими полями пользуется. @zen_of_python

Марк Шеннон и Даниэле Пармеджани опубликовали 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

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

Дэвид Бизли пишет с нуля живьём на сцене, за 46 минут проходя весь путь от простого сокета до собственного цикла событий. Слайдов почти нет, только редактор и терминал. Последовательность такая. Берётся заведомо тяжёлая функция — рекурсивные числа Фибоначчи — и простой сетевой сервис. Сначала он последовательный, и один клиент блокирует всех остальных. Дальше появляются потоки: они спасают там, где программа ждёт ввод-вывод, но на вычислениях упираются в глобальную блокировку интерпретатора. Затем процессный пул, который блокировку обходит, но платит за это сериализацией и передачей данных. Самая ценная часть в конце. Бизли показывает, что генератор с yield — это способ задачи добровольно приостановиться, и из этого прямо на глазах собирает планировщик с очередью задач, а потом цикл событий с select, ожиданием и пробуждением через пару сокетов. После этого asyncio перестаёт быть магией: видно, из каких частей он состоит и почему устроен именно так. @zen_of_python

Создаём программу, которая сама умеет выбирать модели в зависимости от задачи Чем дольше работаешь с ИИ, тем больше убеждаешь
Создаём программу, которая сама умеет выбирать модели в зависимости от задачи Чем дольше работаешь с ИИ, тем больше убеждаешься, что под разные задачи нужны разные модели. Дя простых задач не нужна дорогая модель, а со сложной дешевая может не справиться. А ещё, используя только одну модель, вы рискуете получить кирпич, если эта модель вдруг станет недоступна. Выход — разделить запросы по сложности и держать под рукой запасной вариант. Сначала ваш скрипт решает, насколько труден вопрос, потом отправляет простое к дешёвой модели, а сложное — к мощной. При сбое переключается на резервную модель. Туториал разбирает это на Python шаг за шагом. #python

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