Zen of Python
Полный Дзен Пайтона в одном канале Разместить рекламу: @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 951 підписників, посідаючи 6 776 місце в категорії Технології та додатки та 34 770 місце у регіоні Росія.
📊 Показники аудиторії та динаміка
З моменту свого створення невідомо, проект продемонстрував стрімке зростання, зібравши аудиторію у 18 951 підписників.
За останніми даними від 26 серпня, 2026, канал демонструє стабільну активність. Хоча за останні 30 днів спостерігається зміна кількості учасників на -168, а за останні 24 години на -9, загальне охоплення залишається високим.
- Статус верифікації: Не верифікований
- Рівень залученості (ER): Середній показник залученості аудиторії становить 10.58%. Протягом перших 24 годин після публікації контент зазвичай збирає 6.33% реакцій від загальної кількості підписників.
- Охоплення публікацій: В середньому кожен допис отримує 2 005 переглядів. Протягом першої доби публікація в середньому набирає 1 200 переглядів.
- Реакції та взаємодія: Аудиторія активно підтримує контент: середня кількість реакцій на один пост – 5.
- Тематичні інтереси: Контент зосереджений навколо ключових тем, таких як github, rust, pip, api, install.
📝 Опис та контентна політика
Автор описує ресурс як майданчик для висловлення суб'єктивної думки:
“Полный Дзен Пайтона в одном канале
Разместить рекламу: @tproger_sales_bot
Правила общения: https://tprg.ru/rules
Другие каналы: @tproger_channels
Сайт: https://tprg.ru/site
Регистрация в перечне РКН: https://tprg.ru/xZOL”
Завдяки високій частоті оновлень (останні дані отримано 27 серпня, 2026), канал підтримує актуальність та високий рівень охоплення публікацій. Аналітика показує, що аудиторія активно взаємодіє з контентом, що робить його важливою точкою впливу в категорії Технології та додатки.
django-scroll-to-top: один template-тег, Django Admin, настройка цвета и положения через админку без правки шаблонов.
Без jQuery, CDN и обязательной сборки. Если JavaScript выключён, остаётся обычная ссылка в начало страницы. Если в ваших Django-проектах кнопку надоело таскать между шаблонами, я бы заглянул в разбор на Tproger.encoding больше не зависит от локали системы;
🔘PEP 810: явные ленивые импорты, модуль грузится при первом обращении, а не на старте программы, это срезает время запуска тяжёлых утилит;
🔘PEP 814: встроенный тип frozendict, неизменяемый словарь без сторонних библиотек;
🔘PEP 661: встроенный sentinel для значений-маркеров вместо самодельных объектов-заглушек;
🔘PEP 798: распаковка через * и ** прямо внутри list- и dict-comprehension;
🔘PEP 799: отдельный пакет для профилирования и Tachyon, высокочастотный статистический сэмплер.
@zen_of_pythonpw.io.elasticsearch.read читает индекс Elasticsearch: своего механизма отслеживания изменений у него нет, поэтому коннектор опрашивает и сверяет пересечение соседних запросов, чтобы ни одна строка не потерялась и не пришла дважды;
🔘pw.io.clickhouse.write пишет в ClickHouse по нативному протоколу, в двух режимах: поток изменений с колонками time и diff либо снапшот текущего состояния в ReplacingMergeTree;
🔘pw.io.mysql.read делает полноценный захват изменений через бинлог MySQL: сначала снимок таблицы, потом непрерывная доставка вставок, обновлений и удалений;
🔘расширили чтение Iceberg, теперь декодируются все примитивные типы, включая date, time, uuid, fixed и decimal;
🔘у коннекторов Postgres добавили набор проверок на старте, чтобы кривая конфигурация падала понятной ошибкой ещё до молчаливой потери строк.
Пригодится дата-инженерам, которые строят аналитику и ETL реального времени и устали склеивать поток из десятка разных коннекторов вручную.
https://github.com/pathwaycom/pathway
Язык: Python и Rust. Лицензия: BSL-1.1.
@prog_toolsemail и модуль для SMTP-соединений: формируете сообщение, добавляете вложения и адресатов, подключаетесь к серверу и отправляете. Для отладки удобно поднять локальный SMTP-сервер — письма не уйдут в интернет, но вы увидите, как они собираются.
Явное лучше неявного, но ручная сборка писем со временем утомляет. Статья разбирает сторонние инструменты вроде Yagmail и transactional email-сервисов, чтобы вы могли выбрать между «всё под контролем» и готовым решением.
Кому полезно: тем, кто отправляет уведомления, рассылки или отчёты из Python и хочет сравнить подходы.time.sleep() — не везде правильный способ подождать
В синхронном скрипте time.sleep(2.5) идиоматичен: пауза в текущем потоке, никаких сюрпризов. Но в отдельном потоке ту же паузу не прервать по сигналу: лучше threading.Event().wait(), который просыпается по event.set().
В асинхронном коде time.sleep() заморозит весь event loop, потому что корутина не уступает управление. Правильный инструмент: await asyncio.sleep(), он приостанавливает только текущую задачу.
В гайде ещё про декоратор retry, rate limit и паузы в GUI через root.after().PyMutex, замок размером в один байт, на котором держится free-threaded Python.
Зачем такой маленький? В режиме без GIL блокировка нужна на каждый объект отдельно: свой замок у каждого dict, list, set. Старый замок через py_recursivelock_t занимает 72 байта. Для сравнения, пустой список в Python 3.13 весит 56 байт, пустой словарь 64. Вешать по 72 байта на каждый объект невозможно. PyMutex решает это: один байт, из которого реально используются два бита под состояния (свободен, занят, занят с ожидающими потоками).
Что показали замеры. Дизайн взят из WebKit, у их движка есть WTF::Lock, а под капотом лежит _PyParkingLot, кроссплатформенный аналог futex. На захвате и освобождении без конкуренции:
🔘Linux x86-64: PyMutex 11 нс против 44 нс у старого замка, в 4 раза быстрее;
🔘macOS arm64: 13 нс против 18 нс, в 1,4 раза;
🔘Windows x86-64: 13 нс против 38 нс, в 2,9 раза.
Оговорка для авторов C-расширений: напрямую PyMutex использовать не стоит, легко словить взаимоблокировку. Для защиты доступа к объектам есть critical section API, Py_BEGIN_CRITICAL_SECTION(obj).
@zen_of_pythonapp.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_pythonAnnotated. Если пишете на 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_pythonRequestKey и ResponseKey вместо строковых ключей в request[...] — промах по типу теперь ловит чекер, а не прод;
🔘 работа с JSON прямо в байтах: json_bytes_response и send_json_bytes отдают уже сериализованные байты, без лишнего прохода через строку;
🔘 в WebSocket появился decode_text — получить TEXT-фрейм сразу как bytes и скормить его, например, orjson;
🔘 encode_basic_auth для аккуратной сборки заголовка Basic-аутентификации;
🔘 cleanup-контексты приложения теперь умеют асинхронные менеджеры контекста.
Если держите сервисы на aiohttp, апгрейд бесплатно даёт и более строгие типы, и меньше накладных расходов на JSON под нагрузкой.
@zen_of_pythongrouped_bar() — группированные столбчатые диаграммы из коробки, без ручной возни со смещениями;
🔘 размеры фигуры можно задавать в px и cm, а не только в дюймах;
🔘 pie_label для подписей на круговых диаграммах;
🔘 отдельный hatchcolor — цвет штриховки независимо от цвета контура;
🔘 встроенные палитры Okabe-Ito и Petroff, дружелюбные к дальтоникам;
🔘 улучшения 3D-графиков и интерактивности.
Группированные бар-чарты и нормальная интернационализация подписей — то, вокруг чего годами городили костыли. А вы что чаще рисуете в Matplotlib?
@zen_of_pythonfit был чёрным ящиком: запустил и ждёшь. Теперь на estimator можно повесить колбэки через set_callbacks():
🔘 ProgressBar рисует прогресс обучения прямо в Jupyter или терминале;
🔘 ScoringMonitor следит за метрикой по ходу обучения, а не только в самом конце.
Что ещё в релизе:
🔘 metric_at_thresholds сразу считает метрики бинарной классификации по сетке порогов, без ручного перебора;
🔘 конфиг sparse_interface переводит трансформеры на sparse arrays вместо устаревших sparse matrices;
🔘 HTML-репр обученной модели теперь показывает не только параметры, но и fitted-атрибуты;
🔘 под капотом перешли на narwhals — библиотека лучше дружит с разными датафреймами, не только с pandas.
Колбэки — та фича, которой не хватало годами: видеть, что многочасовой fit реально движется, а не завис. Уже обновились или пока сидите на проверенной версии?
@zen_of_pythonLiteral["a", "b"], редактор предложит ровно эти значения;
🔘 рефакторинги «вынести функцию или класс в новый модуль» и «перенести символ в другой файл» с автоматическим переписыванием импортов;
🔘 навигация по pytest-фикстурам: от использования фикстуры можно прыгнуть к её определению;
🔘 новый LSP-endpoint getExpectedType: редактор спрашивает у чекера, какой тип ожидается в текущей позиции, и подсказывает точнее;
🔘 команда pyrefly coverage check показывает, насколько код покрыт аннотациями типов.
А вы уже пробуете быстрые чекеры на Rust или пока остаётесь на mypy?
@zen_of_pythonCounter не только считает, но и сразу выдаёт топ: 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_pythonruff format --check споткнулся о нарушение форматирования в _hooks.py;
🔘потом ruff check нашёл E402 (импорт не в начале файла) и I001 (несортированные импорты) в __init__.py.
Пайплайн красный, релиз не собрался, стилер до пользователей не доехал. Атакующий получил полный доступ на запись в репозиторий и споткнулся о проверку сортировки импортов.
Разбор инцидента опубликовала StepSecurity, и вывод из него шире смешного заголовка. Строгий линтинг в CI — это не только про красоту кода. Вредоносные инъекции почти всегда выглядят чужеродно: обфусцированные блобы, импорты посреди файла, нетипичное форматирование. Линтер с жёсткими правилами превращается в дешёвый детектор аномалий, который не обойти, не понимая кодстайл проекта.
Так что когда в следующий раз будете ворчать на красный пайплайн из-за несортированных импортов — вспомните, что ровно эта проверка спасла проект на 33 тысячи звёзд.
@zen_of_pythonuv audit. Сканирует зависимости проекта по базе OSV на известные уязвимости и заброшенный статус пакетов. Работает в 4-10 раз быстрее pip-audit — фирменный стиль Astral на месте.
Вторая интереснее: проверка на малварь прямо при установке. С переменной окружения UV_MALWARE_CHECK=1 команды uv add и uv sync сверяют залоченные зависимости с MAL-записями OSV и блокируют установку известной малвари до того, как её код вообще запустится. Учитывая, что свежие PyPI-кампании прячут стилеры в .pth-хуки, которые срабатывают при каждом старте интерпретатора даже без импорта пакета, проверка до установки — единственный момент, когда ещё не поздно.
В планах у Astral резолвер, который сам избегает уязвимых версий при разрешении зависимостей, и режим предупреждений только для новых зависимостей, чтобы не тонуть в алертах по старым.
Обе фичи в preview, но включить UV_MALWARE_CHECK в CI можно уже сейчас — бесплатная страховка. Кто на uv, попробуйте uv audit на своём проекте и расскажите, сколько насыпало.
@zen_of_python