zen_of_python | Unsorted

Telegram-канал zen_of_python - Zen of Python

20144

Полный Дзен Пайтона в одном канале Разместить рекламу: @tproger_sales_bot Правила общения: https://tprg.ru/rules Другие каналы: @tproger_channels Сайт: https://tprg.ru/site Регистрация в перечне РКН: https://tprg.ru/xZOL

Subscribe to a channel

Zen of Python

«С — это причина, по которой придумали Python»
#кек
@zen_of_python

Читать полностью…

Zen of Python

Вопросы подписчиков

Zen of Python поддерживает новоприбывших (и не только) в особой рубрике. Как это работает:

— Спрашивайте что угодно (в комментариях под этим постом), связанное с Python. Здесь нет плохих вопросов!
— Сообщество вас поддержит. Самые интересные вопросы мы разберём в отдельном посте;

#вопросы_новичков
@zen_of_python

Читать полностью…

Zen of Python

Таро врёт! В отличие от нашей IT-колоды

Цифровые арканы говорят с вами и проливают свет на ранее неведомые потоки информации. Вытяните «Карту дня» и получите мудрый совет судьбы: https://tprg.ru/ldLR

Реклама

Читать полностью…

Zen of Python

dripdrop | Стриминг JSON

Экспериментальный инструмент, который позволяет стримить данные в ваших API. Он возвращает клиенту JSON-скелет с плейсхолдерами вместо данных и постепенно заполняет его по мере готовности асинхронных результатов. DripDrop реализует концепцию прогрессивного JSON, вдохновленную React Server Components, чтобы ваши интерфейсы могли отображать данные без ожидания самых медленных запросов (Skeleton Loader). Быстрые части ответа отправляются сразу, а медленные догружаются потоками через JSON Lines.

Репозиторий проекта
#инструмент
@zen_of_python
💘 — Если нравится Skeleton Loader

Читать полностью…

Zen of Python

logging | Эволюционируем от дебага с print()

Вместо хаотичного использования print() стоит освоить встроенный модуль logging.

Почему print() — не лучший выбор

На начальном этапе разработки многие прибегают к такому для отладки. Однако в продакшене такой подход не подходит:

print() не имеет уровней важности (debug, info, error…);
— нельзя гибко управлять выводом (в файл, консоль, внешнюю систему)
— невозможно централизованно отключить или настроить поведение.

logging решает все эти задачи и стал стандартом в профессиональной разработке.

База

Минимальный пример:


import logging

logging.basicConfig(level=logging.INFO)
logging.info("Программа запущена")


Этот код выведет в консоль строку «информирующего» уровня. Метод basicConfig задает базовые настройки — например, какой минимальный уровень логов выводить. Уровней несколько:

— DEBUG: подробная отладочная информация;
— INFO: стандартный рабочий поток;
— WARNING: потенциальные проблемы;
— ERROR: ошибки, но программа продолжает работать;
— CRITICAL: фатальные ошибки, возможно аварийное завершение.

Они позволяют фильтровать отладочные данные в зависимости от задачи.

Форматирование вывода

Полезно выводить время, уровень и контекст:


logging.basicConfig(
level=logging.INFO,
format="%(asctime)s [%(levelname)s] %(message)s"
)


Выведется нечто подобное:


2025-07-07 14:00:00,123 [INFO] Программа запущена


Запись логов в файл

Конечно, командная строка не бесконечная, как и ваше рабочее время, так что разумно записывать логи в файл, чтобы почитать их в нужное время:


logging.basicConfig(
level=logging.INFO,
filename='app.log',
filemode='a',
format="%(asctime)s [%(levelname)s] %(message)s"
)


Обособленные логгеры

Функция getLogger(name) позволяет создавать независимые логгеры с именем:


logger = logging.getLogger("myapp")
logger.setLevel(logging.DEBUG)
logger.debug("Отладочная информация")


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

Обработчики (Handlers)

В примере ниже все сообщения уровня DEBUG и выше пишутся в файл, а WARNING+ отображаются в консоли:


handler = logging.FileHandler("debug.log")
handler.setLevel(logging.DEBUG)

console = logging.StreamHandler()
console.setLevel(logging.WARNING)

formatter = logging.Formatter("%(asctime)s [%(levelname)s] %(message)s")
handler.setFormatter(formatter)
console.setFormatter(formatter)

logger = logging.getLogger("myapp")
logger.addHandler(handler)
logger.addHandler(console)
logger.setLevel(logging.DEBUG)


И напоследок: пишите логи в файл или систему мониторинга вроде Sentry или Grafana.
#основы

Читать полностью…

Zen of Python

​​Vitess | Шардирование для вашей PostgreSQL

Это слой между приложением и базой данных, созданный выходцами из YouTube для защиты от неэффективных запросов и масштабируемости под экстремальными нагрузками. Он также анализирует SQL-запросы на лету, отсекая потенциально опасные. Vitess — система шардирования, основа для Multigrass — проекта по адаптации для PostgreSQL внутри Supabase. Vitess стал частью их инфраструктуры, чтобы приложения могли расти до миллиардов запросов, оставаясь при этом "просто PostgreSQL".

Сайт проекта
#инструмент
@zen_of_python

Читать полностью…

Zen of Python

За ты понятный и работящий

@ithumor

Читать полностью…

Zen of Python

​​Если обыгрывать фильм про Джанго и одноименный фреймворк, то только так

#кек
@zen_of_python

Читать полностью…

Zen of Python

​​#кек
@zen_of_python

Читать полностью…

Zen of Python

Вы знаете почему так?

@ithumor

Читать полностью…

Zen of Python

pip vs. pip3 | Что выбрать?

Если вам вдруг стало очень важно понимать различие между этими менеджерами зависимостей, то все просто. Основное различие — это «прнадлежность» версиям Python 2 или 3:
pip — это менеджер пакетов по умолчанию для Python 2 / 3 (где «двойка» не установлена;
pip3 — это явно указанный менеджер пакетов для Python 3.

Если у тебя установлен только Python 3, pip и pip3 будут работать одинаково.

Как проверить, какая версия связана с pip


pip --version # pip 20.0.2 from /usr/lib/python2.7/site-packages/pip (python 2.7)



pip3 --version # pip3 21.2.4 from /usr/lib/python3.8/site-packages/pip (python 3.8)


#основы
@zen_of_python

Читать полностью…

Zen of Python

TypedDict | Куда, зачем

Для тех, кто стремится писать поддерживаемый код, существует TypedDict («Типизированный словарь»). В этом посте разберём, зачем нужен, как правильно использовать и какие возможности открывает.

TypedDict — это специальный тип данных, что позволяет создавать словари с явно заданными типами для ключей и значений. Таким образом, вы можете описать структуру словаря, как будто это объект с фиксированными полями.


from typing import TypedDict

class User(TypedDict):
name: str
age: int
email: str


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

В примере выше мы создаем класс User, который наследуется от TypedDict. Теперь словари типа User должны иметь ключи name, age и email с типами str, int и str соответственно.

Теперь при создании экземпляра:


user: User = {
"name": "Alice",
"age": 30,
"email": "alice@example.com"
}


если в словаре отсутствует обязательный ключ или тип значения не совпадает, современные инструменты статической типизации (например, mypy) выдадут ворнинг.


Опциональные ключи

Бывает, что не всегда все ключи словаря на месте. В TypedDict их можно сделать необязательными (total=False):


class User(TypedDict, total=False):
nickname: str
bio: str


#основы
@zen_of_python

Читать полностью…

Zen of Python

Streamlit v.1.46.0

Вышло массивное обновление BI-тула , и там теперь среди прочих:
— меню навигации можно разместить в верхней части приложения с помощью st.navigation(position="top");
— поддерживается темная тема через st.context.theme;
— большинство виджетов и элементов теперь поддерживают параметр ширины width;
— добавлена настройка CORS для разрешённых источников;
— в сообщениях об ошибках появился удобная копипаст-кнопка;
— теперь можно запускать сервер Streamlit на порту 3000 без дополнительных настроек;
— добавлена поддержка форматов номеров для колонок с числами и прогресс-баров.

Release Note
#инструмент
@zen_of_python
🫡 — Если отдаю честь за такую работу

Читать полностью…

Zen of Python

Упорядочены ли словари в Python?

Что значит «упорядоченный»?

Когда говорят об упорядоченности, важно понять контекст. Например:

— Если просят расставить коробки, порядок — по размеру;
— Если вы в очереди – порядок по времени прихода.

Если структура упорядоченная, она в каком-то смысле сохраняет свой внутренний порядок. А как со словарями?


Исторический обзор

До Python 3.6: словари не сохраняли никакого порядка при выводе или переборе. Параметры key: value могли выводиться в совершенно произвольном порядке.

Начиная с Python 3.6 словари начали сохранять порядок вставки — но это считалось технической деталью реализации, а не официально гарантированным свойством. Позднее это стало частью официальной спецификации языка.


Это значит, что словари упорядочены?

Частично — да:: словари сохраняют порядок добавления элементов. Это позволяет, например, при переборе ключей получать их в том же порядке, что при вставке.

Важное «но»: порядок не влияет на сравнение словарей:


a = {"x": 1, "y": 2}
b = {"y": 2, "x": 1}
a == b # True


То есть, равенство проверяется по парам ключ‑значение, а не по их порядку (в отличие от списка).


Почему обычный dict сравнивается по содержанию, а не по порядку?

— Оптимизация: словари предназначены для быстрой работы по ключу (хэширование);
— Благодаря «разделённой таблице» (split-table) в реализации CPython, словарь может одновременно эффективно хранить и порядке вставки, и хэш-структуру.

#основы
👌 — Если всё по красоте

Читать полностью…

Zen of Python

#кек
@zen_of_python

Читать полностью…

Zen of Python

Честный ресёрч найма в IT прямо с рынка

Вместе с Proglib мы разобрали, почему айтишники реально уходят с работы, по каким признакам вычислить токсичный коллектив и какие HR-трюки бесят разработчиков больше всего. Если ещё не читали — советуем это исправить❤️

Бонусом мы подготовили ещё два полезных лонгрида из этого исследования:
Где искать работу в IT: лайфхаки и топ-площадки
Каких разработчиков переизбыток и кому сейчас сложнее найти вакансию

Сохраняйте и кидайте коллегам!

Читать полностью…

Zen of Python

throttled-py | Ограничение частоты запросов

Если вам нужно защищиться от DDoS-атак, контролировать затраты и в целом оптимизировать производительность, эта библиотека поддерживает популярные алгоритмы: Fixed / Sliding Window, Token Bucket и проч. Она подходит для как синхронных, так и асинхронных приложений. Для хранения состояния лимитов можно использовать как быстрый In-Memory режим, так и масштабируемый Redis-бэкенд. «Питонический дроссель» интегрируется с MCP Python SDK, позволяя эффективно контролировать частоту вызовов в диалоговых процессах моделей.

Репозиторий проекта
#инструмент
@zen_of_python

Читать полностью…

Zen of Python

​​curlify | Из requests в cURL

Инструмент для преобразования запросов из requests в эквивалентные «курлы». Он автоматически добавляет все необходимые флаги, включая -X, -H, -d, --compressed и другие, чтобы команда точно отражала параметры исходного запроса. Благодаря опции pretty=True можно получить красиво отформатированную, многострочную cURL-команду, удобную для чтения и вставки в консоль. Библиотека заботится о безопасности и корректности, надежно экранируя кавычки и специальные символы для совместимости с командной строкой.

Репозиторий проекта
#инструмент
@zen_of_python

Читать полностью…

Zen of Python

​​lxml обновился

Небезызвестный тул для парсинга XML / HTML в Python-коде получил мажорное обновление, и в нем:
— обновили зависимости;
— отказались от Python 2;
— повысили стабильность и безопасность;

Release Note
#инструмент
@zen_of_python

Читать полностью…

Zen of Python

Присоединяйся к хакатону года в сфере travel-tech - О!Хакатону от Островка ❤️

Островок приглашает Go и Python разработчиков, а также аналитиков и продакт-менеджеров попробовать свои силы в реальных бизнес-задачах и побороться за денежный приз.

Мероприятие пройдет полностью в онлайн-формате, участвовать можно из любой точки мира, самостоятельно или в команде.

Призовой фонд: 1 000 000 ₽
Регистрация открыта до 18 сентября.
Старт 26 сентября! ❤️

Подробности и регистрация

Реклама. ООО "БРОНИРОВАНИЕ ГОСТИНИЦ", ИНН 7703389880, erid: 2W5zFJuGSKr

Читать полностью…

Zen of Python

shebang: что это и как запускать скрипты в CLI без слова python?

При работе с Unix-подобными системами (Linux, macOS), часто используется специальная строка, которая называется 'shebang' (шибэнг). Это первая строка в скрипте, которая начинается с символов #!, за которыми идёт путь к интерпретатору, который должен выполнить этот скрипт:


#!/usr/bin/env python3

print("Hello world")


Это равносильно: «Для запуска этого файла используй интерпретатор python3, который находится в вашем PATH».

Перед запуском сделаем файл исполняемым (или сразу всю директорию):


chmod +x myscript.py
chmod +x misc/*.py


Теперь скрипт можно запустить так:

./myscript.py



Как правильно писать shebang для Python?

Существует несколько распространённых вариантов записи shebang для Python:

1. Абсолютный путь


#!/usr/bin/python3


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

2. Использование `/usr/bin/env`:


#!/usr/bin/env python3


Команда env ищет в текущем окружении пользователя нужный интерпретатор по имени python3 и запускает его. Это значит, что не важно, где установлен Python, скрипт всё равно будет работать, если python3 доступен в PATH.


Что произойдет без shebang?

Если запустить скрипт без shebang напрямую (./myscript.py), система не поймет, каким интерпретатором его запускать, и выдаст ошибку.

p.s. На Windows shebang не используется системой напрямую, но некоторые инструменты (например, Git Bash, WSL, или IDE) могут её «наследовать».

#основы
@zen_of_python

Читать полностью…

Zen of Python

​​PySnooper | Дебаггинг по-человечески

Опять кто-то пытается отучить нас использовать print() во время дебага... Автор тула предлагает использовать:
— декораторы @pysnooper.snoop();
— блоки with pysnooper.snoop();

Чтобы в итоге получить такую отладочную информацию, как на приложенном скриншоте. Вот что происходит на нем слева:
— вызывается функция number_to_bits с аргументом number = 6;
— в строках кода функции (справа) видно, что она предназначена для перевода числа в двоичный формат, сохраняя биты в списке bits;
— PySnooper пошагово логирует каждую выполненную строку (слева), время выполнения, а также все изменяющиеся переменные;
— переменная number последовательно изменяется от 6 до 3, потом до 1, затем до 0
— каждый раз происходит деление с остатком (divmod(number, 2)), а остаток (remainder) вставляется в начало списка bits;
— В итоге возвращается список битов [1, 1, 0], что соответствует двоичному представлению числа 6.

Репозиторий проекта
#инструмент
@zen_of_python

Читать полностью…

Zen of Python

Как искать работу в IT в 2025, не вызывая подозрений у санитаров

В отборе в IT страсти кипят не меньше, чем в хайлоаде. Вместе с Proglib мы провели исследование и спросили сотни айтишников: что реально выводит из себя в найме?

Собрали всё в удобный чек-лист:
– HR узнают, как не отпугивать сильных кандидатов.
– Айтишники поймут, где сразу маячат ред флаги и можно не терять время.

Надеемся, материал хоть и немного, но изменит процессы найма к лучшему. Поэтому сохраняйте, делитесь и прожимайте ❤️

Читать полностью…

Zen of Python

​​Как по мнению Python-разработчика на самом деле должен работать Pip-Boy в игре Fallout.

#кек
@zen_of_python

Читать полностью…

Zen of Python

Вопросы подписчиков

Zen of Python поддерживает новоприбывших (и не только) в особой рубрике. Как это работает:

— Спрашивайте что угодно (в комментариях под этим постом), связанное с Python. Здесь нет плохих вопросов!
— Сообщество вас поддержит. Самые интересные вопросы мы разберём в отдельном посте;

#вопросы_новичков
@zen_of_python

Читать полностью…

Zen of Python

asdf-vm | Переключаться между окружениями автоматом

Продвинутая система управления виртуальными окружениями, позволяющая в одну команду:
— устанавливать зависимости для НЕСКОЛЬКИХ ЯП в одном окне;
— при переходе в папку другого проекта переключится на соответствующее окружение и многое другое.

Цена: бесплатно
Репозиторий проекта
Сайт
🌚 — Если это уже слишком «дебри»
😎 — Если считаешь такое элегантным

Читать полностью…

Zen of Python

​​Джависткие Virtual Threads в Python

На официальном форуме Python не на шутку разогнали тред про виртуальные потоки. Идея похожа на OpenJDK Project Loom: такое не потребляет много ресурса.

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

#факт
@zen_of_python

Читать полностью…

Zen of Python

SQLZoo: интерактивный тренажёр по SQL

Если надоело читать теорию и хочется потрогать SQL ручками — SQLZoo станет идеальным выбором. Здесь сразу на сайте можно выполнять задания, строить запросы к реальным базам и видеть результат.

Есть пошаговые туториалы, задания на SELECT, JOIN, GROUP BY, подзапросы и задачки на логику.

Читать полностью…

Zen of Python

Общий сбор питонистов на митапе ЮMoney ™️

Питоняшки — бесплатный митап ЮMoney для Python-разработчиков.

3 июля, в четверг, в 19:00 (мск) — приходите на митап в Санкт-Петербурге или подключайтесь онлайн.

О чём будут доклады?

🟣 Это не те метрики, что вы ищете. Разберётесь, почему стандартного экспортёра может не хватать, и как написать свой на Python.
🟣 Кодогенерация: как компьютеры учатся писать код за нас. Узнаете про прошлое, настоящее и будущее кодогенерации в разных языках программирования.
🟣 Ruff: как не положить всё, переходя на новые правила? Узнаете больше про линтеры, форматтеры и подводные камни при переходе на Ruff.
🟣 Секреты успеха змеи в мире пауков. Узнаете, как команда ЮMoney применяла scrapy и playwright в продукте, чтобы создать сервис модерации сайтов.

Зарегистрируйтесь, чтобы принять участие. Все подробности — на сайте митапа Питоняшки 🔥

Это #партнёрский пост

Читать полностью…

Zen of Python

#кек
@zen_of_python

Читать полностью…
Subscribe to a channel