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 613 suscriptores, ocupando la posición 7 030 en la categoría Tecnologías y Aplicaciones y el puesto 35 241 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 613 suscriptores.

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

  • Estado de verificación: No verificado
  • Tasa de interacción (ER): El promedio de interacción de la audiencia es 7.25%. Durante las primeras 24 horas tras publicar, el contenido suele obtener 4.20% de reacciones respecto al total de suscriptores.
  • Alcance de las publicaciones: Cada publicación recibe en promedio 1 349 visualizaciones. En el primer día suele acumular 782 visualizaciones.
  • Reacciones e interacción: La audiencia responde de forma activa: el promedio de reacciones por publicación es 2.
  • 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 15 noviembre, 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 613
Suscriptores
+224 horas
-447 días
-16130 días
Atraer Suscriptores
nov '26
noviembre '26
+20
en 1 canales
octubre '26
+75
en 0 canales
Get PRO
septiembre '26
+89
en 5 canales
Get PRO
agosto '26
+62
en 5 canales
Get PRO
julio '26
+46
en 5 canales
Get PRO
junio '26
+120
en 2 canales
Get PRO
mayo '26
+124
en 0 canales
Get PRO
abril '26
+84
en 1 canales
Get PRO
marzo '26
+74
en 3 canales
Get PRO
febrero '26
+75
en 9 canales
Get PRO
enero '26
+136
en 1 canales
Get PRO
diciembre '25
+140
en 5 canales
Get PRO
noviembre '25
+158
en 5 canales
Get PRO
octubre '25
+258
en 7 canales
Get PRO
septiembre '25
+143
en 1 canales
Get PRO
agosto '25
+180
en 3 canales
Get PRO
julio '25
+248
en 4 canales
Get PRO
junio '25
+208
en 6 canales
Get PRO
mayo '25
+214
en 4 canales
Get PRO
abril '25
+189
en 2 canales
Get PRO
marzo '25
+175
en 6 canales
Get PRO
febrero '25
+134
en 5 canales
Get PRO
enero '25
+89
en 3 canales
Get PRO
diciembre '24
+92
en 1 canales
Get PRO
noviembre '24
+137
en 6 canales
Get PRO
octubre '24
+95
en 4 canales
Get PRO
septiembre '24
+102
en 3 canales
Get PRO
agosto '24
+98
en 1 canales
Get PRO
julio '24
+82
en 3 canales
Get PRO
junio '24
+67
en 1 canales
Get PRO
mayo '24
+95
en 0 canales
Get PRO
abril '24
+148
en 0 canales
Get PRO
marzo '24
+107
en 1 canales
Get PRO
febrero '24
+116
en 4 canales
Get PRO
enero '24
+109
en 1 canales
Get PRO
diciembre '23
+123
en 6 canales
Get PRO
noviembre '23
+103
en 2 canales
Get PRO
octubre '23
+140
en 5 canales
Get PRO
septiembre '23
+91
en 0 canales
Get PRO
agosto '23
+218
en 0 canales
Get PRO
julio '23
+211
en 0 canales
Get PRO
junio '23
+159
en 0 canales
Get PRO
mayo '23
+292
en 0 canales
Get PRO
abril '23
+193
en 0 canales
Get PRO
marzo '23
+194
en 0 canales
Get PRO
febrero '23
+316
en 0 canales
Get PRO
enero '23
+424
en 0 canales
Get PRO
diciembre '22
+522
en 0 canales
Get PRO
noviembre '22
+454
en 0 canales
Get PRO
octubre '22
+257
en 0 canales
Get PRO
septiembre '22
+638
en 0 canales
Get PRO
agosto '22
+750
en 0 canales
Get PRO
julio '22
+745
en 0 canales
Get PRO
junio '22
+1 008
en 0 canales
Get PRO
mayo '22
+622
en 0 canales
Get PRO
abril '22
+1 260
en 0 canales
Get PRO
marzo '22
+975
en 0 canales
Get PRO
febrero '22
+1 947
en 0 canales
Get PRO
enero '22
+597
en 0 canales
Get PRO
diciembre '21
+203
en 0 canales
Get PRO
noviembre '21
+1 278
en 0 canales
Get PRO
octubre '21
+2 258
en 0 canales
Get PRO
septiembre '21
+376
en 0 canales
Get PRO
agosto '21
+766
en 0 canales
Get PRO
julio '21
+1 065
en 0 canales
Get PRO
junio '21
+737
en 0 canales
Get PRO
mayo '21
+132
en 0 canales
Get PRO
abril '21
+2 962
en 0 canales
Get PRO
marzo '21
+1 825
en 0 canales
Get PRO
febrero '21
+613
en 0 canales
Get PRO
enero '21
+3 216
en 0 canales
Get PRO
diciembre '20
+7 337
en 0 canales
Fecha
Crecimiento de Suscriptores
Menciones
Canales
15 noviembre+1
14 noviembre+4
13 noviembre+1
12 noviembre+1
11 noviembre0
10 noviembre+2
09 noviembre+1
08 noviembre0
07 noviembre0
06 noviembre+3
05 noviembre+1
04 noviembre+3
03 noviembre0
02 noviembre+2
01 noviembre+1
Publicaciones del Canal
os.cpu_count() может считать больше, чем доступно потоку Число логических CPU в системе и число CPU, на которых разрешено раб
os.cpu_count() может считать больше, чем доступно потоку Число логических CPU в системе и число CPU, на которых разрешено работать текущему потоку, могут различаться. Начиная с Python 3.13, os.process_cpu_count() возвращает второе. По документации Python, оно может быть меньше os.cpu_count() из-за CPU affinity. Если определить число не удалось, результатом будет None. Есть важная поправка для диагностики: параметр запуска -X cpu_count=n или переменная PYTHON_CPU_COUNT переопределяет результат обеих функций. В отдельном проверенном процессе с -X cpu_count=2 обе вернули 2. Это заданная настройка, а не измерение оборудования или демонстрация ограничения affinity. Проверяйте конфигурацию запуска, прежде чем выбирать размер пула по этому числу. API не считает физические ядра и не обещает универсально определять квоты cgroup. Оптимальное число воркеров всё ещё зависит от вашей нагрузки.

2
Почему batch_size не ограничивает всю подготовку bulk_update В bulk_update(objects, fields, batch_size=100) размер пачки огра
Почему batch_size не ограничивает всю подготовку bulk_update В bulk_update(objects, fields, batch_size=100) размер пачки ограничивает число объектов в одном SQL-запросе. Но Django заранее готовит WHEN-выражения для всех переданных объектов, включая следующие пачки. Маленький batch_size не делает один большой вызов потоковым. В документации Django 6.0 предлагают внешний цикл: взять порцию ID через islice, загрузить только её модели, изменить поля и вызвать bulk_update() для этой порции. В проверенном примере шесть строк обновились за три отдельных вызова по две модели. Внутри каждого batch_size=1 дал два UPDATE-запроса. Это два разных уровня разбиения. Если заранее собрать все модели в список, внешний цикл не вернёт уже занятую ими память. И массовое обновление не вызывает save() и сигналы pre_save/post_save. Учитывайте это, если там находится нужная вам логика.
673
3
Process.interrupt() даёт дочернему процессу KeyboardInterrupt В Python 3.14 у multiprocessing.Process появился interrupt(). Н
Process.interrupt() даёт дочернему процессу KeyboardInterrupt В Python 3.14 у multiprocessing.Process появился interrupt(). На POSIX он посылает дочернему процессу SIGINT. При стандартном обработчике в нём возникает KeyboardInterrupt, а стек Python разворачивается с выполнением блоков finally. В нашем проверенном примере родитель дождался готовности собственного дочернего процесса, вызвал interrupt() и сделал join(3). Дочерний процесс оставил файл из finally и завершился с exitcode == 1, как при неперехваченном исключении. У terminate() такой гарантии выполнения finally нет. Это не гарантия остановки: второй тестовый процесс перехватил KeyboardInterrupt и продолжил работать до отдельного разрешения на выход. Обработчик сигнала тоже может изменить поведение. После ожидания проверяйте is_alive(). На Windows поведение метода не определено — это ограничение прямо указано в документации interrupt.
679
4
PEP 639 разделяет лицензию и файлы с её текстом В метаданных пакета нужно различать обозначение лицензии и файлы с юридически
PEP 639 разделяет лицензию и файлы с её текстом В метаданных пакета нужно различать обозначение лицензии и файлы с юридическими текстами. Финальная спецификация PEP 639 вводит для Core Metadata 2.4 поле License-Expression с выражением SPDX и отдельные поля License-File. В pyproject.toml строка license = "MIT" задаёт выражение, а license-files = ["LICENSE"] указывает файлы для включения в дистрибутив. Это пример записи, а не выбор лицензии за автора. Каждый явно заданный шаблон должен найти хотя бы один файл. Старые таблицы license = {text = ...} и {file = ...} объявлены устаревшими. Карточка показывает схему спецификации. Мы проверили разбор TOML и наличие файла в учебной папке, но это не проверка поддержки сборочным backend. В своём пакете проверьте метаданные и файлы уже собранных wheel и sdist. Выражение SPDX не заменяет лицензионные тексты и само по себе не предоставляет новых прав.
820
5
Как закрыть asyncio.Queue без стоп-сигнала в данных В Python 3.13 у asyncio.Queue появился shutdown(). После вызова очередь б
Как закрыть asyncio.Queue без стоп-сигнала в данных В Python 3.13 у asyncio.Queue появился shutdown(). После вызова очередь больше не принимает элементы: новые и уже ожидающие put() получают QueueShutDown. Для завершения конвейера не нужен специальный объект, который потребители должны отличать от обычных данных. При обычном завершении оставшиеся элементы можно забрать через get(). Когда очередь опустеет, он тоже вызовет QueueShutDown — потребитель может перехватить исключение и выйти. Для каждого обработанного элемента по-прежнему нужен task_done(), чтобы дождаться join(). Завершения самих задач потребителей ждите отдельно. Режим immediate=True отбрасывает лежащие в очереди элементы. Уже взятая работа остаётся незавершённой: в проверенном примере join() ждал её task_done(). Возврат из него не доказывает, что отброшенные элементы обработаны. Различия режимов описаны в документации shutdown.
870
6
Placeholder оставляет место перед связанным аргументом У str.replace исходная строка стоит перед заменяемым фрагментом. Если
Placeholder оставляет место перед связанным аргументом У str.replace исходная строка стоит перед заменяемым фрагментом. Если нужен колбэк, удаляющий дефисы из любой строки, хотелось бы заранее задать второй и третий позиционные аргументы, оставив первый свободным. В Python 3.14 это делает functools.Placeholder. Импортируйте его как _ и создайте partial(str.replace, _, "-", ""). При вызове strip_dash("a-b-c") строка займёт пропуск, и получится "abc". Раньше partial тоже связывал аргументы по имени, но позиционные пропуски позволяют фиксировать аргументы после свободного места, включая параметры, которые нельзя передать по имени. Если пропусков несколько, входящие позиционные аргументы заполняют их слева направо. Все пропуски нужно заполнить при вызове, иначе будет TypeError. Передать сам Placeholder как именованный аргумент в partial нельзя.
926
7
Как узнать, какие тесты выполняли строку кода Зелёная строка в coverage-отчёте показывает, что код выполнялся. Чтобы увидеть,
Как узнать, какие тесты выполняли строку кода Зелёная строка в coverage-отчёте показывает, что код выполнялся. Чтобы увидеть, в каких тестах это происходило, у pytest-cov есть --cov-context=test. Он сохраняет ID теста и фазу выполнения: setup, run или teardown. Запустите pytest --cov=calc --cov-context=test --cov-report=html, заменив calc именем своего модуля. В .coveragerc включите [html] show_contexts = True. В нашем запуске coverage 7.17.2 на CPython 3.14.4 понадобился ещё [run] core = ctrace: стандартный sysmon предупреждал о неполных контекстах. По документации pytest-cov, нажатие на число у покрытой строки раскрывает список контекстов. У параметризованных случаев будут разные test ID, включая заданные вами имена. В проверенном примере два случая neg и pos дали шесть контекстов у одной строки: её вызывали в каждой из трёх фаз. Число контекстов не равно числу тестов. И такой отчёт показывает выполнение кода, а не качество проверок результата.
890
8
Как читать BLOB из SQLite по частям Если вложение хранится в SQLite, не обязательно получать его целиком как один bytes. Начи
Как читать BLOB из SQLite по частям Если вложение хранится в SQLite, не обязательно получать его целиком как один bytes. Начиная с Python 3.11, Connection.blobopen() открывает существующий BLOB по имени таблицы, столбца и rowid. У полученного объекта есть файловые операции чтения и записи. Размер задаётся заранее: zeroblob(8) создаёт восемь нулевых байтов, которые затем можно перезаписать частями. На карточке — фрагмент проверенного примера: после двух записей по четыре байта чтение с read(4) выдаёт два блока. Для большого объекта выбирайте подходящий размер блока и обрабатывайте каждый сразу, не собирая их обратно в список. Без аргумента read() прочитает весь остаток до конца. Сам BLOB через этот интерфейс увеличить нельзя, а таблицы WITHOUT ROWID не поддерживаются. Контекстный менеджер закрывает BLOB-дескриптор. Детали — в описании Blob.
948
9
pytest --sw возвращает к последнему упавшему тесту После правки несколько тестов падают подряд. Если исправляете их по одному
pytest --sw возвращает к последнему упавшему тесту После правки несколько тестов падают подряд. Если исправляете их по одному, pytest --sw помогает не прогонять уже пройденное начало набора при каждой попытке. Он останавливается на первом падении и сохраняет позицию между запусками. Следующий запуск с --sw начинает с того же упавшего теста. Если вы его починили, pytest идёт дальше до следующей ошибки. В нашем проверенном примере первый прогон остановился на test_b, а после исправления второй повторил test_b и дошёл до падения test_c. Это отличается от --lf, который выбирает ранее упавшие тесты. Механизм описан в документации pytest. Позиция хранится в кэше, а не в памяти остановленного процесса. Ранние успешные тесты после ваших правок могли сломаться. Когда закончите исправления, запустите весь набор обычным pytest.
1 006
10
ZIP с Zstandard может не открыться у получателя Архив успешно собрался и распаковался вашим Python, но это ещё не проверка со
ZIP с Zstandard может не открыться у получателя Архив успешно собрался и распаковался вашим Python, но это ещё не проверка совместимости с утилитой получателя. Для ZIP с Zstandard важны и поддержка алгоритма, и его числовой идентификатор в архиве. В Python 3.14 появился zipfile.ZIP_ZSTANDARD. По документации zipfile, модуль читает Zstandard с ID 20 и 93, а записывает только 93. Старый ID 20 заменили в спецификации, чтение сохранили ради совместимости. Локальный пример на CPython 3.14.4 подтвердил запись 93 и восстановление исходных байтов. Нужна сборка Python с необязательным модулем compression.zstd. Если архив уйдёт за пределы вашей среды, проверьте распаковку именно инструментом получателя: часть утилит, включая старые версии Python, Zstandard в ZIP не поддерживает.
1 020
11
Как посмотреть локальные переменные после ошибки в REPL Вызов в интерактивном Python завершился исключением, а по traceback н
Как посмотреть локальные переменные после ошибки в REPL Вызов в интерактивном Python завершился исключением, а по traceback непонятно, какое значение привело к ошибке. Пока эта сессия открыта, можно посмотреть локальные переменные в месте ошибки без повторного запуска вызова. Импортируйте pdb и выполните pdb.pm(). Функция берёт последнее необработанное исключение из sys.last_exc и открывает отладчик на кадре, где оно возникло. Команда p x покажет значение x в этом кадре. На карточке — выполненный пример: после f(0) виден локальный x = 0. Такой сценарий есть и в документации pdb. Это просмотр сохранённого traceback в том же живом REPL. Продолжить исходный вызов, завершившийся исключением, нельзя. После выхода из интерпретатора этот приём уже не поможет.
1 018
12
abi3t сокращает число сборок нативного расширения Нативному расширению обычно нужны отдельные сборки под версии CPython, а fr
abi3t сокращает число сборок нативного расширения Нативному расширению обычно нужны отдельные сборки под версии CPython, а free-threaded варианты ещё увеличивают их число. Начиная с CPython 3.15, Stable ABI для free threading, или abi3t, позволяет одной сборке на платформу поддерживать несколько версий. Она совместима и с обычными сборками CPython 3.15+. Для этого придётся ограничиться доступной частью C API и, возможно, пожертвовать скоростью. Руководство рекомендует сначала подготовить расширение к free threading. Если оно использует генератор кода или биндинги, стоит дождаться поддержки abi3t в соответствующем инструменте. Расширения с собственными типами переменного размера нельзя перенести на abi3t 3.15. А совместимость ABI не исключает изменений поведения между версиями: тесты нужно запускать на каждой поддерживаемой версии, в обычной и free-threaded сборках Python.
1 058
13
Установщик Python 3.15 для macOS ставит обе сборки по умолчанию В установщике Python 3.15 с python.org для macOS free-threade
Установщик Python 3.15 для macOS ставит обе сборки по умолчанию В установщике Python 3.15 с python.org для macOS free-threaded сборка отмечена по умолчанию. Она ставится рядом с обычной, в отдельный PythonT.framework, и запускается командой python3.15t. Отключить этот компонент можно через Customize. У сборок отдельные каталоги site-packages и собственные экземпляры pip. Наличие пакета в обычном Python поэтому не означает, что он установлен и во free-threaded варианте. В инструкции для macOS рекомендуют использовать виртуальные окружения, чтобы не путать интерпретаторы. Эта настройка относится к официальному установщику, а не ко всем дистрибутивам Python для Mac. Нативные расширения могут ещё не поддерживать работу без GIL и включать его обратно. Перед запуском приложения во второй сборке проверьте совместимость его зависимостей.
1 110
14
Unicode-идентификатор начинается и продолжается по разным правилам Если вы пишете токенизатор или подсветку для языка с Unicode-именами, проверки «это буква или цифра» может оказаться недостаточно. У Unicode есть отдельные свойства для начальной и последующих позиций идентификатора. В Python 3.15 эти проверки добавили в unicodedata. Функция isxidstart проверяет свойство XID_Start, а isxidcontinue — XID_Continue по UAX #31. Каждая принимает один символ. Модуль использует базу Unicode 17.0.0. Так можно проверять свойства символов без собственного списка диапазонов, который придётся обновлять вместе с Unicode. Для проверки целого имени нужны ещё правила конкретного языка. Например, эти функции не проверяют, является ли имя зарезервированным словом.
1 218
15
Обновление Python не обновляет pip в старых venv В Python 3.15.1 обновили комплектный pip до 26.2.2. В его состав входит certifi 2026.10.19 с изменениями после инцидента с центрами сертификации eMudhra / emSign. Но установка нового интерпретатора сама по себе не обновляет инструменты внутри уже созданных виртуальных окружений. На странице релиза отдельно просят обновить pip и uv в существующих venv до последних версий. Там же приведены ссылка на wheel pip с SHA-256 и отдельная инструкция по обновлению сертификатов для установки на macOS. Проверяйте версию pip внутри нужного окружения. Версия системного Python этого не показывает. Для обновления сертификатов выбирайте инструкции релиза, относящиеся к вашему способу установки.
1 248
16
Стартовый код пакета переезжает из .pth в .start Файл .pth может не только расширять sys.path. При запуске Python модуль site
Стартовый код пакета переезжает из .pth в .start Файл .pth может не только расширять sys.path. При запуске Python модуль site исполняет найденные в нём строки, начинающиеся с import. Этот код выполняется ещё до первой строки приложения. В Python 3.15 PEP 829 вводит файлы .start с явными точками входа в форме pkg.mod:callable. Функция вызывается без аргументов, возвращённое значение отбрасывается. У PEP статус Final. Если рядом есть одноимённый .start, строки import из соответствующего .pth игнорируются. Добавление путей из .pth сохраняется. Это позволяет переносить стартовую инициализацию отдельно от настройки путей, сохраняя старый файл для прежних интерпретаторов.
1 230
17
Decimal в тайм-ауте не делает ожидание точнее Тайм-аут может прийти в программу как Decimal из конфигурации или как Fraction после вычисления. В Python 3.15 функции с аргументами timestamp и timeout принимают любые вещественные числа, а не только int и float. В описании изменения отдельно оговорено: точность от этого не повышается. Изменение позволяет передавать уже вычисленное значение без преобразования на стороне вызывающего кода. Что именно ограничивает тайм-аут и когда функция возвращает управление, по-прежнему зависит от её контракта. Допустимый числовой тип этих правил не меняет.
1 224
18
wxPython 4.3.2 добавил wheels для Python 3.15 и проверку типов обработчиков Bind При переходе Python-приложения с нативным GUI на новый интерпретатор нужны и подходящие бинарные сборки GUI-библиотеки. В wxPython 4.3.2 заявлены официальная поддержка Python 3.15 и сборка wheels для него. Релиз использует wxWidgets 3.3.4. Выпуск Windows wheels для 32-битной архитектуры прекращён. Сгенерированные .pyi теперь позволяют проверять типы обработчиков, передаваемых в Bind. Среди других правок в stubs — представление enum в виде классов и более полное описание методов и типов. Типизатор сможет найти часть ошибок при подключении событий до запуска окна. Работу виджетов в вашей ОС нужно проверять отдельно. Перед миграцией проверьте наличие подходящего wheel и поведение GUI на целевой платформе.
1 287
19
Фильтры предупреждений в CLI научились понимать регулярки В CI бывает нужно превратить в ошибку конкретное семейство предупре
Фильтры предупреждений в CLI научились понимать регулярки В CI бывает нужно превратить в ошибку конкретное семейство предупреждений и оставить остальные видимыми. Настройку для дочернего процесса удобно передать через -W или PYTHONWARNINGS, без правок приложения. Начиная с Python 3.15 поля сообщения и модуля поддерживают регулярные выражения, если поле начинается и заканчивается косой чертой. Без этих разделителей сохраняется буквальное сопоставление. Это дополнение к синтаксису фильтра, его действия и категории остаются прежними. У полей разные правила. Сообщение сопоставляется с начала без учёта регистра. Имя модуля учитывает регистр: буквальная строка должна совпасть целиком, а регулярное выражение проверяет начало полного имени. Поэтому одинаковый шаблон в этих двух полях может охватить разные предупреждения.
1 260
20
Одинаковое имя XMP-тега ещё не означает одно поле В метаданных изображения могут встретиться XML-теги с одинаковым локальным
Одинаковое имя XMP-тега ещё не означает одно поле В метаданных изображения могут встретиться XML-теги с одинаковым локальным именем из разных пространств имён. Если убрать URI пространства, различить такие свойства по одному имени уже не получится. В Pillow 13.0.0 метод Image.getxmp получил аргумент strip_namespaces. По умолчанию он равен True, и библиотека по-прежнему убирает URI. Значение False сохраняет полное имя тега в форме {namespace-uri}local-name. Если вам нужно различать свойства из разных пространств имён, выбирайте False и учитывайте полные ключи при чтении результата. Опция меняет только представление имён XMP-тегов.
1 203