Zen of Python – Telegram
Zen of Python
19.6K subscribers
1.33K photos
200 videos
38 files
3.41K links
Полный Дзен Пайтона в одном канале

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

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

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

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

Регистрация в перечне РКН: https://tprg.ru/xZOL
Download Telegram
Пять платформ, где дети учат Python через игры — от простых песочниц до олимпиадных задач. Trinket, Tynker, CodeCombat, Minecraft, CheckiO — разобрано для кого что подходит по возрасту и уровню.

@zen_of_python
👍5
Бенчмарк 8 Python-библиотек для извлечения текста из документов

Авторы Kreuzberg выложили обновлённое сравнение 8 open source инструментов для text extraction: Kreuzberg, Apache Tika, Docling, Unstructured, PDFPlumber, Pandoc, PyMuPDF4LLM, MarkItDown, Mineru. 56 типов файлов, p50/p95/p99 по скорости и памяти, quality score против ground truth.

Методика: бенчмарк-харнес на Rust, запускается в GitHub Actions CI. Замеряют extraction duration, throughput, memory, success rate. Качество измеряют через сравнение извлечённого текста с эталоном.

И что бы вы думали, кто победил? Конечно же сам Kreuzberg. Он покрывает больше всего форматов (49/56), success rate 99,1%. Docling и Unstructured надёжны, но в разы медленнее. Docling на сложных файлах может считать 60+ минут на файл.

​Но бенчмарк открытый и воспроизводимый, так что в целом как будто Kreuzberg реально можно пробовать.

@zen_of_python
👍31
25 лет на ORM, теперь — raw queries + dataclasses. И вот почему

Майкл Кеннеди (автор Talk Python to Me) отказался от ORM/ODM в пользу паттерна Raw+DC: сырые запросы к базе + Python dataclasses на границе слоя доступа к данным.

🔘Главный аргумент: ИИ-ассистенты пишут нативные запросы в разы лучше, чем ORM-код. У PyMongo в 53 раза больше загрузок, чем у Beanie, и нативный синтаксис MongoDB одинаковый в Node, PHP, Go. Разница в обучающих данных огромна.

🔘Паттерн простой: raw query → dict → from_doc() → dataclass. Type safety, автокомплит в IDE, поддержка mypy — всё на месте. Без магии ORM, без зависимости от фреймворка.

🔘В комментах согласны с ИИ-аргументом, но напоминают: ORM — это не только запросы, но и миграции, валидация, защита от SQL-инъекций. Raw SQL повышает порог ответственности за безопасность.

📎 Тред на r/Python

А вы как обычно кодите?

@zen_of_python, теперь и в Max
10🌚1
Вот ещё новость прошедшей недели: PyTorch перевёл тайпчекинг основного репозитория с MyPy на Pyrefly. Проверка всего проекта: MyPy — 50,6 сек, Pyrefly — 5,5 сек.

Вроде здорово, молодцы, но ведь есть ty. Ещё и пост в блоге написали, как будто одна известная большая корпорация повлияла.

А вы чем в 2026 тайп-чекаете?

(Да, как вы поняли, очень хочется пообщаться с вами, дайте каких-то комментариев, пожалуйста.)
4
Анализ датасета QUT-DV25 (14 000 семплов малвари из PyPI) показал, что больше половины пакетов запускают reverse shell или крадут env-переменные прямо в setup.py т.е. достаточно pip install, даже без импорта.

Проблема: sdist-пакеты требуют выполнения setup.py при сборке. Это обычный Python-скрипт, он может делать что угодно — от сборки C-расширения до отправки ~/.ssh/id_rsa на C2-сервер.

Есть такой инструмент KEIP — eBPF-тул на LSM-хуках, который ставит сетевой whitelist на время pip install. Если setup.py или дочерний процесс лезет на сервер не из белого списка — весь процесс убивается

Вообще, в 2026 setup.py — это красный флаг. Если пакет без pyproject.toml и без wheel, то может он и не нужен вам?

@zen_of_python
This media is not supported in your browser
VIEW IN TELEGRAM
43
МФТИ запускает онлайн-школу «Предпринимательское планирование»

Преподаватели с кафедры Технологического предпринимательства, а окончание школы даёт поступление в магистратуру на эту кафедру без экзаменов.

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

@zen_of_python, также в Max
2🤣2👍1
Как вам формат TOON (Token-Oriented Object Notation) вместо JSON?

Массивы объектов объявляются один раз в заголовке users[2]{id,name,role}:, а дальше идут только данные через запятую без лишних скобок и ключей. Это сокращает объём данных на 30–60%.

Для Python уже есть готовые библиотеки, например python-toon и toons. Для промтов в ИИ экономия токенов. Для людей на глаз вроде тоже проще читается.

С другой стороны это просто CSV с дополнением, вложенности не очень удобно делать. Что думаете?

@zen_of_python, также в Max
👍93👎3
Вышел Starlette 1.0.0rc1, первый релиз-кандидат после 8 лет разработки

Напомню, Starlette — легковесный ASGI-фреймворк для Python. Поддерживает WebSocket, HTTP/2, фоновые задачи, middleware и маршрутизацию. На нём построен FastAPI, Starlette отвечает за всю сетевую часть, а FastAPI добавляет сверху валидацию через Pydantic и автогенерацию OpenAPI-схемы.

Том Кристи создал Starlette в июне 2018, а сейчас Марсело Трилесинский (Kludex) выпустил первый RC версии 1.0. Почти 10 млн скачиваний в день, а с недавних пор ещё и зависимость Python MCP SDK.

Что в релизе. Удаление deprecated-фич, помеченных для удаления в 1.0.0, плюс финальные баг-фиксы. Никаких крупных новых API, акцент на стабильности.

Реакция сообщества. «Starlette работала настолько стабильно, что казалось, будто 1.0 уже давно вышла». Несколько человек отметили, что узнали о Starlette как о зависимости, только когда начали копаться в MCP-серверах.

Установка: pip install starlette==1.0.0rc1

@zen_of_python, также в Max
🔥8🎉5
PEP 747 принят. В typing добавится TypeForm[T] — способ аннотировать аргументы, которые принимают не значения, а сами типы: int | str, list[int], TypedDict и другие.

Раньше функции вроде trycast() или is_match() из библиотек beartype, pydantic, typeguard приходилось аннотировать через object, слишком широко, без проверки типов.

Теперь можно так:
def trycast[T](typx: TypeForm[T], value: object) -> T | None: ...
def is_match[T](value: object, typx: TypeForm[T]) -> TypeGuard[T]: ...

# Или просто переменная:
int_form: TypeForm = int | None


В Python приедет с версии 3.15. Уже сейчас доступно через typing_extensions. Экспериментальная поддержка есть в Pyright

@zen_of_python

Telegram | Max
👍91
Внезапное порно в Conda

История такая: один разработчик хотел посмотреть YouTube, открыл меню «Пуск» в винде, начал вбивать You и увидел подсказу YouPorn. Очень удивился, потому что он не смотрит порно (конечно, а как вы подумали).

Начал расследование. Оказалось, что файл с таким именем лежит в
Anaconda3\pkgs\protego\info\test\tests\test_data


Protego — Python-библиотека для парсинга файлов robots.txt. В её тестовых данных есть пример файла robots.txt с сайта YouPorn т.е. обычный тест на реальных данных из интернета. Никакого вредоносного кода, никакой атаки на supply chain, просто Windows Search проиндексировал содержимое тестовых файлов внутри пакетов Conda.

Это хороший повод напомнить: Windows Search индексирует всё подряд, включая содержимое директорий с пакетами. При разработке на винде лучше добавить такие диры в исключения. Или не разрабатывать на винде.

@zen_of_python
🌚12😁722
Senior-level решение задачи

@zen_of_python (теперь и в Max)
😁22😐521
Опубликован черновик PEP 827 (Type Manipulation). Он предлагает добавить в Python возможности из TypeScript, чтобы не дублировать код при описании моделей.

Допустим, у вас есть класс User для базы данных, где есть id, email, username и created_at. Вам нужен класс UserUpdate для API, где id и created_at менять нельзя, а остальные поля необязательны, можно обновить только email.

Сейчас приходится вручную писать новый класс и дублировать поля.
С PEP 827 можно будет сгенерировать его одной строкой:
UserUpdate = Partial[Omit[User, "id" | "created_at"]]


Omit убирает лишние поля из базового класса
Partial делает оставшиеся необязательными
— Если тип email изменится в главной модели, он автоматически обновится и в UserUpdate

Вместо копипасты под каждый эндпоинт (Create, Update, Read) вы описываете одну модель и генерируете производные. И всё это работает на уровне статического анализа. Черновик нацелен на Python 3.15.

@zen_of_python (теперь и в Max)
🔥7👎4