Zen of Python
19.8K subscribers
1.32K photos
197 videos
38 files
3.4K links
Полный Дзен Пайтона в одном канале

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

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

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

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

Регистрация в перечне РКН: https://tprg.ru/xZOL
Download Telegram
Бывший CTO поделился тестом, который за 15 секунд отсеивал половину кандидатов. И это не фигура речи, реально 53% ошибались.

Я специально спрячу объяснение за спойлер, чтобы вы могли перейти по ссылке и попробовать решить задачу. Осуждать никого не будем, просто проверьте себя.

Если ваш ответ 1, то поздравляю, вы быстро в уме разобрали код и поняли логику. Если -11, то значит вы скопировали код в ChatGPT или интерпретатор и поленились делать в уме. Так же поступают в среднем 50% кандидатов.

Дело в том, что в коде спрятан знак =, который появляется только при копировании и условие меняется на >= 3. Ну и ответ, конечно, тоже.


И в чём смысл?

Не то чтобы копировать — это прям плохо. Смысл скорее в том, что для простой задачи быстрее прогнать код в голове, чем открывать терминал. Если кандидат не может выполнить три итерации цикла мысленно — это сигнал.

Автор признаёт: метод не идеальный, бывают false negatives. Но он вдвое сокращает время на обработку откликов.

@zen_of_python
🔥156
Один разработчик реализовал bytes.replace() из Python на CUDA — для обработки многогигабайтных файлов прямо на GPU без передачи данных на CPU.

Бенчмарки (RTX 3090)
🔘1 MB: 1,09x (почти одинаково)
🔘5 MB: 1,80x
🔘50 MB: 3,43x
🔘100 MB: 4,37x

Среднее ускорение: 3,45x, пропускная способность: 0,79 GB/s

Ключевые фичи
🔘Точная семантика Python (leftmost, non-overlapping replacements)
🔘Streaming mode — файлы больше VRAM обрабатываются чанками
🔘Session API — несколько замен подряд без переинициализации
🔘Thread-safe

Пример
from cuda_replace import CReplaceLib

lib = CReplaceLib()
result = lib.unified(data, b"pattern", b"replacement")

# Для больших файлов
cleaned = lib.gpu_streaming(huge_data, b"old", b"new", chunk_size=256*1024*1024)


➡️ Зачем это нужно

Автор делал GPU-компрессию и хотел убрать лишние трансферы между CPU и GPU. Другие применения: санитизация логов, обработка сетевых пакетов, любые задачи с поиском/заменой в больших бинарных данных.

И давайте признаем, это просто круто, search-replace на CUDA блин :)

📎 Код на GitHub

@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥94
Вышел pandas 3.0: строки теперь хранятся через PyArrow (до 70% экономии памяти, до 13x быстрее), а Copy-on-Write стал обязательным.

Что сломается

🔘Цепочечное присваивание больше не работает:
# Было: работало с warning'ом
df["foo"][df["bar"] > 5] = 100

# Стало: молча НЕ работает
# Правильно:
df.loc[df["bar"] > 5, "foo"] = 100


🔘Проверки dtype:
# Было
if df['col'].dtype == object: ...

# Стало
if pd.api.types.is_string_dtype(df['col']): ...


Как мигрировать
1️⃣Обновитесь до pandas 2.3, уберите warnings
3️⃣Включите в тестах: pd.options.future.infer_string = True
3️⃣Найдите dtype == object и цепочечные присваивания
4️⃣Обновляйтесь до 3.0

Требования: Python 3.11+, NumPy 1.26.0+, PyArrow 13.0.0+

Для production лучше подождать пару недель — релиз свежий.

📎 Changelog, GitHub

@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🫡5🔥1
Репозиторий anthropics/skills — самый популярный Python-репозиторий на GitHub прямо сейчас. +1400 звёзд в день, 50 тыс. уже набежало.

➡️ Что такое Skills

Skills — это папки с инструкциями и скриптами, которые Claude динамически подгружает для выполнения специализированных задач. По сути, плагины для ИИ: вместо того чтобы каждый раз объяснять модели, как работать с вашими процессами, вы описываете это один раз в файле.

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

➡️ Как устроено

Skill — это YAML с названием, описанием и markdown-инструкциями. Можно указать примеры использования и ограничения. Claude читает это при активации и следует описанным правилам.
---
name: my-skill-name
description: What this skill does
---
# Instructions for Claude...


➡️ Зачем это вам

Если используете Claude для повторяющихся задач — Skills позволяют один раз описать процесс и использовать повторно. Документные skills (PDF, DOCX, XLSX) уже готовы. Для собственных — есть шаблон и примеры.

📎 Репозиторий

@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
👍72
😁19👍6🔥3💯21
Вышел packaging 26.0 — тот самый релиз с ускорением в три раза, о котором писал пару недель назад.

Напомню контекст: packaging — библиотека для работы с версиями и зависимостями. Встроена в pip, а pip — в Python. 650+ миллионов скачиваний в месяц.

➡️ Что в релизе

Обещанные оптимизации: регулярки больше не перекомпилируются каждый раз, добавлены __slots__ для Version и Specifier, улучшено кэширование. Результат — парсинг версий стал в три раза быстрее, количество создаваемых объектов в pip упало с 4,8 млн до 400 тыс.

➡️ Новые фичи

PEP 751 — поддержка pylock-файлов для воспроизводимых установок. PEP 794 — импорт метаданных имён пакетов. Positional pattern matching для Version и Specifier — теперь работает match version:
from packaging.version import Version

match Version("3.14.0"):
case Version(major=3, minor=14):
print("Python 3.14!")


➡️ Breaking changes

.contains() теперь возвращает False вместо исключения для невалидных версий. Если ловили InvalidVersion — проверьте код.

Обновление подтянется автоматически с новыми версиями pip.

📎 Changelog, PyPI

@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
12
😁21💯3❤‍🔥21
Django в продакшене на 500 000 пользователей в месяц — не стартап, а французское правительство.

La Suite — экосистема цифровых инструментов для госслужащих Франции. 15 министерств, 500 000 активных пользователей ежемесячно.

Что внутри:


🔘Tchap — мессенджер на Matrix, 375 000 активных пользователей ежемесячно
🔘Visio — видеозвонки с ИИ-транскрипцией на LiveKit
🔘Docs — совместное редактирование
🔘Grist — таблицы как база данных
🔘France Transfert — передача больших файлов

Бэкенд на Django. Весь код в открытом доступе.

Данные хранятся на SecNumCloud во Франции с полной портабельностью — экспорт в .ppt, .xls, .odt без vendor lock-in.

Это хороший пример того, как выглядит Django в govtech-продакшене уровня страны. Можно изучить архитектуру, посмотреть как они решают масштабирование, безопасность и интеграцию с legacy-системами.

📎 La Suite, GitHub

@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
11👍3🔥2
Forwarded from Типичный программист
🔄 Артефакт №1. Категория: «Город» 🔄

От кого только не прилетает самокатчикам. Иногда за дело, иногда нет. Не нам судить, но мы обсудим, что делать, например, с явными нарушителями? Как их контролировать, если операторы кикшеринга не пускают в свои данные? Закрывать глаза на хаос на тротуарах или тотально запрещать?

Мы получили кейс, где за 4 месяца команда из 7 человек создала платформу мониторинга, которая фиксирует самокатовские нарушения. Их задачей было сделать инструмент для структурирования данных, чтобы чиновники и операторы нашли общий язык.

🤩 Что скрывает этот артефакт? 🤩
🤩 Смекалистый метод охоты за данными, когда реальные видео с камер недоступны.
🤩 Принципы, которые помогли сделать мониторинг более объективным.
🤩 Гибридный R&D: тактика, которая помогла запустить MVP за четыре месяца, вместо шести.

Планируем поделиться с вами целой пачкой интересных артефактов. Ставьте 👀, если любопытно узнать их все.
Please open Telegram to view this post
VIEW IN TELEGRAM
👀13👍41
Bandit — SAST-сканер для Python от PyCQA (те же люди, что делают pylint и flake8). Парсит AST, ищет типичные дыры: eval(), хардкод паролей, слабая криптография, небезопасные temp-файлы.

➡️ Как работает

Каждый файл → AST → прогон плагинов по нодам → отчёт. У каждой находки два атрибута: severity (критичность) и confidence (уверенность, что это реальная проблема). Это помогает расставить приоритеты — сначала High/High, потом остальное.

Интеграция:
# .pre-commit-config.yaml
repos:
- repo: https://github.com/PyCQA/bandit
rev: 1.7.5
hooks:
- id: bandit
args: ['-ll', '-ii']

Есть официальный GitHub Action (PyCQA/bandit-action@v1) и расширение для VS Code.

Для легаси-проектов: сохраняешь текущие находки в baseline, дальше CI показывает только новые. Старые никуда не деваются, но не блокируют билд.

⚡️ UPD: Ruff включает все правила Bandit через реимплементацию flake8-bandit. Если используете ruff, то достаточно добавить select = ["S"] в pyproject.toml:
[tool.ruff.lint]
select = ["S"] # все проверки Bandit

Ruff в 10-100x быстрее оригинального Bandit и не требует отдельной зависимости.

📎 Код на GitHub

@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Мелочь, но приятно: copier-astral — шаблон, который генерит для нового проекта настройки для ruff, uv, pytest, CI/CD одной командой. Как вы поняли, всё для любителей Astral-стека (а кто сейчас не такой?).

Что внутри:
🔘uv — пакетный менеджер
🔘ruff — линтер + форматтер (замена black/isort/flake8)
🔘ty — новый тайпчекер от Astral на Rust
🔘pytest + hatch — тесты с матрицей версий
🔘MkDocs Material — документация
🔘prek — Rust-альтернатива pre-commit (быстрее)
🔘GitHub Actions — CI/CD из коробки
🔘git-cliff — changelog по Conventional Commits

Опционально: Typer CLI scaffold, Docker

Установка:
# сначала uv
curl -LsSf https://astral.sh/uv/install.sh | sh

# затем copier через uv
uv tool install copier --with copier-template-extensions

# создать новый проект
copier copy --trust gh:ritwiktiwari/copier-astral my-project


Почему Copier, а не cookiecutter?


Copier умеет обновлять уже созданные проекты при изменении шаблона — не нужно руками мержить новые best practices.

📎 Код в репо, доки, пример проекта

@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM
🙈21
⚡️ Вышли критические обновления безопасности Django — 6.0.2, 5.2.11 и 4.2.28.

Закрыты три SQL-инъекции высокой критичности:

CVE-2026-1207 — инъекция через raster lookups в PostGIS при использовании пользовательских данных как индексов band.

CVE-2026-1287 — инъекция через управляющие символы в алиасах колонок при использовании FilteredRelation со специально сформированными словарями.

CVE-2026-1312 — инъекция через order_by() и FilteredRelation при использовании точки в алиасах колонок.

Также исправлены: DoS через повторяющиеся заголовки в ASGI (CVE-2025-14550), DoS через незакрытые HTML-теги в Truncator (CVE-2026-1285), timing-атака для перечисления пользователей в mod_wsgi (CVE-2025-13473).

Если используете PostGIS или FilteredRelation — обновляйтесь срочно.

@zen_of_python
Please open Telegram to view this post
VIEW IN TELEGRAM