Zen of Python
18.9K subscribers
1.38K photos
202 videos
38 files
3.56K links
Полный Дзен Пайтона в одном канале

Разместить рекламу: @tproger_sales_bot

Правила общения: https://tprg.ru/rules

Другие каналы: @tproger_channels

Сайт: https://tprg.ru/site

Регистрация в перечне РКН: https://tprg.ru/xZOL
Download Telegram
Почему CPython остаётся стековой машиной, а её соседи уходят на регистры

Байткод CPython стековый: a + b это LOAD_FAST a, LOAD_FAST b, BINARY_OP. Максим Шевалье-Буавер, в прошлом автор YJIT для Ruby, измерила на своём языке Plush, сколько стоит такая модель: после перехода на регистровый байткод, где то же сложение одна инструкция с тремя операндами, медианное ускорение по тестам составило 2,07 раза, максимальное 3,37, а тесты сборщика мусора не изменились вовсе.

Замеры честные: 11 чередующихся запусков, медиана, повтор набора; в сравнении участвовал и CPython 3.14.6, но автор оговаривает разную семантику языков. Вывод один: в интерпретаторе главный рычаг это число инструкций на диспетчеризацию. Как устроено новое 64-битное слово инструкции и почему Lua ограничена 255 регистрами на фрейм, на сайте.

@zen_of_python
CPython официально поддерживает RISC-V как платформу третьего уровня

Работа шла несколько месяцев, и теперь RISC-V официально поддержан в CPython как tier 3. Для питониста это означает, что сборки под эту архитектуру перестали быть самодеятельностью и попали в зону ответственности проекта.

RISC-V это открытая система команд: в отличие от x86 и ARM, она развивается как открытый стандарт, и реализовать её может кто угодно. Экосистема за последние годы выросла заметно.

Третий уровень означает поддержку без гарантий на каждый релиз: сборка проверяется, но падение на этой платформе не блокирует выпуск. Для продакшена на RISC-V это ещё не зелёный свет, а сигнал, что можно начинать проверять свои колёса.

#cpython
Два класса с именем Helper в разных модулях затирают друг другу __value

Name mangling переименовывает __value в _Helper__value только по имени класса, без учёта модуля. Если два независимых класса Helper хранят __value, а кто-то наследуется от обоих, поле оказывается общим: один кладёт строку, другой число, сложение падает с TypeError. Именно этот пример сейчас обсуждают на форуме разработчиков Python в споре о настоящей приватности; рецепт на сегодня: одно подчёркивание и композиция вместо двойного наследования.

В нашем канале «Точка входа» разобрали подробнее.

@zen_of_python
1
Документация Python официально вышла на русском языке

Перевод объявлен официально и доступен на docs.python.org. Сделало его сообщество, и это тот случай, когда вклад волонтёров превращается в инфраструктуру языка.

Практический смысл двойной. Своим джунам теперь можно давать ссылку на официальную документацию, а не на пересказ с непонятной родословной. И при споре о терминологии появляется общая опора: как называется вещь по-русски, решает не переводчик статьи, а перевод самой документации.

Отставать от оригинала перевод будет ровно настолько, насколько его перестанут поддерживать, так что если найдёте кривое место, чинится оно пул-реквестом.
👍61
This media is not supported in your browser
VIEW IN TELEGRAM
Запрограммируй робота на Python и поборись за призовой фонд трека 7 500 000 ₽ на True Tech Champ 2026.

Попробуй себя в треке по программированию роботов. Начать проще, чем кажется: зарегистрируйся, собери команду или объединись с другими участниками на платформе и пройди квалификационный этап до 13 сентября. В онлайн-симуляторе тебе предстоит запрограммировать робособаку для доставки груза через полосу препятствий. Количество попыток не ограничено, а еще тебя будет ждать серия обучающих вебинаров.

Лучшие команды пройдут в финал и будут программировать реальных роботов на офлайн-полигоне, 22 октября, на большой сцене.
Масштабный финал объединит борьбу за призовой фонд, выступления хедлайнеров, доклады спикеров и активности для всех гостей мероприятия.

Рекомендуемые стеки: Go, Java, Python, C#, C++, JS.

Успей зарегистрироваться и пройти квалификацию до 13 сентября.

Erid:2VSb5yJrsAz
🔥1
SpaceWeb исполнилось 25 лет — и вместо скучного пресс-релиза компания вместе с Типичным программистом сделала забавную анкету. Вопросы школьные: любимый спорт, лучший друг, обои на рабочий стол. А вокруг — аська, скайп, биткоин и всё остальное, чем жил рунет с 2001 по 2026 год, плюс короткая история веба и самой компании.

В конце — заглянем в будущее, дадим промокод на услуги SpaceWeb и покажем результат заполнения анкеты.
2
Найти повторяющиеся строки просто, а вот решить, что считать одинаковым кодом, уже нет

Задача звучит тривиально: есть исходники, найди последовательности строк, которые встречаются больше одного раза. Автор Arid, чекера дублей для Python, начинал ровно с этой формулировки.

Ответ, как обычно, оказался «зависит от того, что вы имеете в виду». Переименованная переменная, другой порядок аргументов, вынесенный в константу литерал — текстуально это разный код, а по смыслу тот же самый.

Разбор интересен именно этим: как выбрать уровень абстракции, на котором сравнивать, и где проходит граница между дублем и совпадением. Полезно, если у вас в CI стоит проверка на дубли и вы не понимаете её вердиктов.
Автор написал токенизатор, RoPE и SwiGLU руками и обучил модель на бытовой видеокарте

Развернуть Unsloth и дообучить Llama 3 за вечер несложно. Автор захотел посмотреть, что будет, если так не делать, и написал всё сам: BPE-токенизатор, RoPE, блоки SwiGLU и цикл обучения на чистом PyTorch.

Получилась EmsyAI версии 4 на 196,7 млн активных параметров: около 180 млн в блоках трансформера, остальное в эмбеддингах словаря примерно на 16 тысяч токенов. Обучение прошло на 1,96 млрд токенов и на потребительской видеокарте.

Ценность тут не в качестве модели, а в том, что каждый слой написан руками и его видно. Если вы читали про RoPE и SwiGLU, но не собирали их сами, это готовый маршрут.
1
В Python шесть предобъявленных констант, и каждая ведёт себя по-своему

True, False, None, __debug__, Ellipsis и NotImplemented. Автор разбирает, чем они отличаются, и различий больше, чем ожидаешь.

Первая тройка это вообще не идентификаторы, а собственные лексические токены: разрешаются в лексере, а не при обычном разрешении имён. Побочный эффект в том, что выражение x.True даёт SyntaxError, и больше в языке так не ведёт себя ничего.

Отдельный случай __debug__: обычный идентификатор, но единственный, которому нельзя присвоить значение, причём даже как атрибуту. При этом x.__debug__ даёт уже AttributeError, потому что синтаксически это законно. Хорошая заметка на вечер, если любите тёмные углы языка.
1
EPUB это ZIP с XHTML внутри, и собрать его обратно после правки труднее, чем разобрать

Сервис LectuLibre переводит книги через модели: пользователь загружает EPUB, бэкенд достаёт текст, отправляет его в Claude или DeepSeek и кладёт перевод обратно в тот же файл. Автор пишет, что именно последний шаг оказался самым тяжёлым.

EPUB это ZIP-архив с документами XHTML, стилями, картинками, шрифтами и служебными файлами вроде container.xml и content.opf. Вернуть переведённый текст на место, сохранив форматирование, изображения, стили и метаданные, значит собрать валидный контейнер заново.

В разборе есть выбор библиотек и компромиссы, на которые пришлось пойти. Пригодится, если строите любой конвейер обработки электронных книг.
1
Что выбрать под неизменяемые объекты: обычный класс или dataclass

Обычный класс порождает изменяемые экземпляры, пока вы явно не запретите менять атрибуты. Отсюда и вопрос, который разбирает автор: где для неизменяемых данных проходит граница между ручным классом и dataclass.

В разборе три части: как сделать неизменяемость на голом классе, что даёт __slots__ для памяти и контроля атрибутов, и что из этого закрывает dataclass(frozen=True) без ручной работы.

Тема из тех, где каждый однажды принимает решение по привычке и живёт с ним годами. Хороший повод пересмотреть привычку на конкретных примерах.
🔥3
EVE Online начала переезд на Python 3 после двух десятилетий на второй ветке

Под каждым прыжком через гейт, каждым ордером на рынке и каждым флитфайтом в EVE лежит очень много Python. Он держит New Eden больше двадцати лет, и теперь CCP объявила о начале перехода на третью ветку.

Формулировка успеха у команды показательная: миграция должна пройти совершенно незаметно, если не считать моментов, когда что-то начнёт работать глаже. Первые шаги уже выкачены на тестовый сервер Singularity.

Это редкий публичный кейс переезда живого продакшена такого возраста. Обещают в итоге более быстрый поиск багов, место под новые фичи и общее ускорение, но дорога, по их же словам, длинная.
🤯5
Соберите первую нейросеть на Python без матана и видеокарты

Слово «нейросеть» звучит так, будто нужен продвинутый матанализ, мощная машина и тысячи строк кода. Ничего из этого не нужно.

На базовом уровне нейросеть это математическая модель, которая берёт на вход числа, что-то с ними считает, выдаёт предсказание, сравнивает его с правильным ответом и подправляет себя, чтобы в следующий раз ошибиться меньше. Этот цикл и есть обучение, всё остальное надстраивается сверху.

В туториале такую сеть строят руками на Python и NumPy, без фреймворков, чтобы был виден каждый шаг. Хороший следующий шаг после основ языка: слова «слой», «веса» и «обучение» перестанут быть заклинаниями и станут строчками кода, которые вы написали сами.

#python
4
Четыре джойна в SQL против одного запроса в графе: справочник по Neo4j и Python

Рамка задана вопросом, который легко произнести и тяжело написать: у каких инженеров есть свежий контекст по сервисам, задетым ночным инцидентом. В SQL это четыре или пять джойнов, каждый строит промежуточный результат шире нужного ответа и тут же выбрасывает большую часть. Запрос замедляется по мере роста таблиц и хуже читается с каждым возвращением к нему.

Справочник ведёт от пустой базы до работающего графа знаний: загрузка настоящих данных из Python и запросы, на которых идея становится понятной.

Разобраны части, которые туториалы пропускают: как решить, что становится узлом, почему первая модель данных почти наверняка неверна, как ускорить загрузку и как читать план запроса, когда что-то тормозит.