@zen_of_python
Zen of Python
Telegram-канал @zen_of_python: 18,8 тыс. подписчиков, 1 тыс. просмотров на пост, оценка 31
31FВыше, чем у 1 из 10 каналов категории
Середина категории 33–52Этот канал 31
- 18,8 тыс.
- Подписчики
- 1 тыс.
- Медиана просмотров за 30 дней
- 5,5%
- Просмотры / подписчики за 30 дней
- 96
- Постов за 30 дней
Данные на 1 октября 2026 г.
О внутреннем устройстве Python и разработке на нём: разбор типов, дескрипторов, асинхронности и особенностей стандартной библиотеки для тех, кто пишет код на Python и хочет понимать, что происходит под капотом. На 13 сентября: подписчиков 18,9 тыс., это на уровне медианы категории, ER держится на уровне медианы категории — 8,7 %. Среди недавних материалов — разбор TypeGuard для сложных случаев распознавания типов, объяснение __getattr__ на уровне модуля, доступного с Python 3.7, разбор надёжности сигналов Django в обработке платежей и сравнение способов чтения Excel-файлов без потери типов данных. Отдельный пост рассказывает, как найти хеш пароля в файле утечек на 37 ГБ быстрее секунды. Постов выходит заметно больше медианы категории.
описание каталога О канале от автора
Полный Дзен Пайтона в одном канале Разместить рекламу: @tproger_sales_bot Правила общения: tprg.ru/rules Другие каналы: @tproger_channels Сайт: tprg.ru/site Регистрация в перечне РКН: tprg.ru/xZOL
Частые вопросы
- Сколько подписчиков?
- Подписчиков — 18,8 тыс. Медиана просмотров поста — 1 тыс. Просмотров на подписчика — 5,5%. Данные на 1 октября 2026 г.
- Как часто выходят посты?
- За 30 дней вышло постов: 96 — это несколько раз в день. Данные на 1 октября 2026 г.
- Есть ли у канала галочка Telegram?
- Галочки Telegram нет.
- Кто ведёт страницу канала в каталоге?
- Пока никто. Если это ваш канал — заберите страницу: сможете отвечать на отзывы и видеть её статистику.
Это ваш канал?
Подтвердите владение — точные метрики и что улучшить, ответы на отзывы от лица канала и бейдж владельца на странице.
Подтвердить владениеЗаймёт минуту: пост с кодом или бот в администраторах
Ваша страница в tg.place
Знаете владельца?
Перешлите ему это сообщение — он подтвердит права и заберёт накопленное: статистику страницы и ответы на отзывы.
18 96918 808
1 окт.18 808
Наведите на график или проведите пальцем — покажем день.
| Из чего складывается | |
|---|---|
| Вовлечённость | 2,9 из 30 |
| Качество роста | 12 из 20 |
| Реакции и пересылки | 4,5 из 15 |
| Регулярность | 3,6 из 12 |
| Доверие | 3,8 из 8 |
| Отзывы | недостаточно данныхотзывов пока нет |
Оценка 31 — по 5 показателям из 6: остальные пока не измерены. Методология
Последние посты
- Как не сломать pickle собственным исключением Python Если конструктор исключения принимает field и reason, не заменяйте их готовой строкой при вызове super().__init__(). Иначе в args останется один элемент, а при восстановлении BaseException.__reduce__ передаст его обратно конструктору. Тот ждёт два аргумента, поэтому распаковка завершится TypeError. Так же ломаются copy.copy() и передача исключения между процессами. Питоничный инвариант прост: args должны оставаться корректным списком аргументов для вашего __init__. Передавайте в базовый класс исходные field и reason, храните структурированные данные в атрибутах, а читаемое сообщение формируйте в __str__. Пример с ValidationError показывает поломку и совместимый вариант класса.
- Как выстроить защиту цепочки поставок Python Эшелонированная схема защиты начинается с собственного кода: Ruff находит секреты, слабую криптографию и запросы без тайм-аута до публикации пакета. Зависимости и их криптографические хеши фиксируют через uv lock или uv pip compile --generate-hashes. Затем pip-audit ищет в CI известные уязвимости, а SBOM помогает понять, затронул ли проект компрометированный пакет. Trusted Publishing с OIDC заменяет долгоживущие API-токены. Хеши не распознают изначально вредоносный пакет, а аудит пропускает неизвестные уязвимости. Поэтому начать стоит с Ruff и фиксации зависимостей, затем добавить аудит и SBOM.
- Пакетная обработка в Python: где strict=True не спасает запись С Python 3.12
itertools.batched()лениво забирает из итератора элементы только для очередного кортежа. Поток из файла, курсора или генератора не приходится сначала превращать в список: памяти для группировки нужно столько, сколько занимает один пакет, а не весь источник. С Python 3.13 параметрstrict=Trueотклоняет неполный последний пакет. Но ошибка возникает во время итерации. При 250 записях и размере пакета 100 первые 200 уже могут попасть в базу, прежде чем оставшиеся 50 вызовутValueError. Строгость проверяет форму входа, а не делает цикл транзакцией. Явное лучше неявного: для записи по принципу «всё или ничего» заранее проверьте конечный источник либо используйте транзакцию системы назначения. Разбор itertools.batched() также объясняет, почемуlist(batched(...))лишает обработку преимущества ленивости. - Как воспроизводить гонки потоков Python с помощью blanket Обычно порядок выполнения потоков выбирает ОС, поэтому редкая гонка превращает тест в лотерею. blanket оборачивает примитивы
threading, а тест сам решает, какой поток продолжит работу. Пять повторов перестают быть стратегией тестирования. ВScenarioможно заставить поток B захватить блокировку раньше A, задать порядок освобождения барьера или выбрать поток, который разбудитnotify(). Каждый такой вызов приостанавливается в планировщике blanket, поэтому сценарий повторяется одинаково. Это полезно при переносе библиотек на Python без GIL, но управление порядком потоков работает на границах примитивов синхронизации. Для гонки внутри гологоcounter += 1нужна дополнительная контрольная точка. blanket закрепляет известный порядок в регрессионном тесте, а не перебирает все возможные гонки. - Как отменять задачи в heapq и сохранять порядок при равных приоритетах
heapqсравнивает кортежи по полям. Поэтому запись(приоритет, задача)при равных приоритетах либо сравнит сами задачи, либо упадёт, если объекты несравнимы. Надёжная форма:(приоритет, номер, задача), где номер выдаётitertools.count(). Он сохраняет порядок добавления и не допускает сравнения задач. Искать и удалять произвольную запись по идентификатору куча эффективно не умеет. Для отмены и смены приоритета можно хранить активные записи в словаре: старую помечать удалённой, новую добавлять в кучу, а помеченные пропускать при извлечении. Лень здесь вполне питонична. У этой схемы очереди есть цена: устаревшие записи занимают память, пока не доберутся до вершины. Если обновлений много, а извлечений мало, кучу стоит периодически пересобирать из активных записей. - Как битовые множества сокращают память моделей Pydantic Explicit is better than implicit, но хранить набор явно переданных полей в полноценном Python
setоказалось накладно. Memray показал: созданиеmodel_fields_setзаняло почти 800 МБ на миллионе экземпляров модели с семью полями. Поскольку поля модели упорядочены, каждому можно назначить номер бита: 1 означает, что значение передали при создании, 0 — что использовано значение по умолчанию. Имена дополнительных полей, которых нет в схеме, остаются в отдельномset. В разборе реализации показано, как выбиратьu8,u16или вектор для моделей разного размера. На тесте с небольшими значениями замена сократила память на 55%. Полезный пример того, почему профилировать стоит не только__dict__, но и служебные структуры каждого экземпляра. - Как проверять плагины через контракт Pydantic и FastAPI Сервис может отвечать по нужным адресам и всё же возвращать несовместимые данные. В схеме общего API-контракта модели Pydantic для
/ready,/catalogи/encode/вынесены в отдельный пакет. Плагин использует эти модели в обработчиках FastAPI, а платформа проверяет ими ответы при регистрации. Если структура не совпадает, сервис не подключается. Контракт фиксирует и ответственность: разбиением входных данных управляет плагин, а проверки доступа вынесены в зависимости FastAPI. Это ловит несовместимый формат до подключения, но не проверяет правильность вычислений. - Как OpenBLAS ускоряет NumPy в браузере Раньше браузерная сборка NumPy выполняла
np.matmulобычными циклами на C, которые не учитывали кэш процессора и векторные инструкции. Теперь NumPy 2.5.3 из Emscripten-forge по умолчанию подключает OpenBLAS 0.3.34 для WebAssembly. На квадратных матрицах 1024 × 1024 умножение ускорилось примерно в 30,92 раза дляfloat32и в 14,90 раза дляfloat64. Прирост зависит от операции. Функцииnp.linalgускорились слабее, поскольку реализация LAPACK ещё не оптимизирована специально для WebAssembly. Экспериментальная OpenBLAS 0.3.35 добавляет новые векторные ядра, а сборка с Relaxed SIMD даёт дополнительное ускорение только в браузерах с поддержкой этого расширения. Бенчмарки и настройки стенда помогают сравнивать сборки по размеру матриц, типу данных и браузеру, а не переносить одну красивую цифру на весь NumPy. - partial или lambda: как специализировать колбэк без сюрпризов
functools.partialзаранее связывает часть аргументов и возвращает вызываемый объект. Сохранённые именованные аргументы работают как значения по умолчанию: при вызове их можно переопределить. Проверки новой сигнатуры при этом нет, поэтому повторная передача одного параметра закончитсяTypeError. Разница сlambdaпроявляется во времени связывания. Лямбда получает текущее значение имени при выполнении, аpartialсохраняет переданный объект при создании. Но копии не делает: изменения связанного списка будут видны, а долгоживущий колбэк удержит контекст в памяти. Сравнение двух способов специализации функций сводится к питоничному правилу: если нужно только связать аргументы, подходитpartial. Если адаптер проверяет данные, логирует или преобразует аргументы, яснее написать именованную функцию черезdef. - Как коллизии превращают построение set в Python в квадратичную задачу Привычное O(1) для
setиdictпредполагает, что коллизии редки. Если много ключей получают одинаковый хеш, интерпретатору приходится искать свободные ячейки и перебирать кандидатов при проверке вхождения. O(1) здесь полезная модель, а не договор с интерпретатором. В эксперименте с подобранными целыми числами удвоение размера почти учетверяло время: построение множества из 16 000 элементов заняло 1072 мс, а из 100 000 — 45 секунд. Проверка всех элементов росла так же. Отдельно автор измерил влияние процессорного кеша: поиск случайных строк вdictзамедлялся по мере роста таблицы даже без коллизий. Это другой механизм, поэтому при неожиданной деградации стоит отдельно проверять распределение хешей и размер данных.
О канале в цифрах
- Создан
- 27 ноября 2020 г.
- Фото
- 1,4 тыс.
- Видео
- 202
- Файлы
- 38
- Ссылки
- 3,6 тыс.
По данным Telegram на 1 октября 2026 г.
Рейтинги и подборки
- Самые крупные каналы · Разработка6-е место
- Самые читаемые каналы · Разработка12-е место
Контакты
- Реклама
- @tproger_sales_bot
Из описания канала
Отзывы
Оставить отзыв
Отзывов пока нет. Ваш будет первым.