zen_of_python | Unsorted

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

20070

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

Subscribe to a channel

Zen of Python

T-строки в Python — новая техника форматирования, которая появилась в 3.14 и стала пятой в списке после %, str.format, string.Template и f-строк. Синтаксис очень похож на f-строки (те же {} и выражения), но результатом выражения t"..." будет уже не str, а объект шаблона.​

Главное отличие: t-строка сама по себе не делает готовую строку, а возвращает объект Template, внутри которого по отдельности лежат куски текста и интерполяции со всеми их метаданными. Это даёт библиотекам возможность сначала пройтись по этим частям (экранировать, валидировать, форматировать), а уже потом собирать финальный вывод.​

Из-за этого t-строки полезны в первую очередь авторам библиотек: логированию, шаблонизаторам, SQL/HTML-обёрткам и любому коду, где хочется контролировать интерполяцию до склейки в строку. Для обычного прикладного кода ничего не меняется — продолжаете использовать f-строки, пока конкретная библиотека явно не попросит передать ей t-строку вместо готового текста.

Нырнуть поглубже можно в статье или на видео к посту.

@zen_of_python

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

Zen of Python

Занятный проект на Python из категории «потому что могу»: Rubiksolver

Коротко: это десктоп-приложение, которое через веб-камеру считывает состояние перемешанного кубика Рубика и показывает пошаговое решение с анимацией в окне на PySide6 с отрисовкой через OpenGL и обработкой изображения в OpenCV. Проект позиционируется как учебный — подойдёт тем, кто хочет понять базовые приёмы компьютерного зрения и графики на практике.​

Сканирование: показываете камере по одной грани по заранее заданным правилам. После скана жмёте Play, чтобы запустить анимацию, или листаете шаги кнопками Previous/Next — так удобно проверять, что распознание и сама сборка идут корректно.​

Установка: клонируете репозиторий, выполняете uv sync для зависимостей и запускаете uv run rubiksolver — автор использует современный менеджер uv, так что установка занимает минимум времени.

Автор отмечает, что на Android встречаются решалки, но чаще всего там состояние кубика приходится вбивать руками, без автосканирования камерой — здесь как раз закрыта эта боль.

@zen_of_python

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

Zen of Python

Все программисты немного Никита

@zen_of_python

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

Zen of Python

Статья «Building a CI/CD Pipeline Runner from Scratch in Python»

Автор показал, как собрать с нуля свой мини‑раннер для CI/CD на Python для случаев без доступа к GitHub Actions/GitLab Runner, чтобы понять, что происходит под капотом и запускать пайплайны в изолированных окружениях без облака. Ключевая идея простая: раннер — это оркестратор, который парсит YAML, строит граф зависимостей, запускает задачи в контейнерах, стримит логи и пробрасывает артефакты между задачами.​

Из примеров: классика со стадиями build/test/deploy, где build кладёт сборку в dist/, тесты берут контент из dist/ и запускаются параллельно, а деплой на прод запускается только в ветке main. Артефакты складываются во внутреннюю .pipeline_artifacts и перед каждым шагом подтягиваются по списку нужных задач, при этом рабочая папка монтируется в контейнер, а команды шага объединяются в одну строку shell.​

Такой раннер пригодится для локального теста конфигов или учебных задач, когда хочется гибкости без внешних сервисов. До продакшен уровня остаются распределённое выполнение, кеши зависимостей, матричные сборки, секреты, сервис‑контейнеры и ретраи, но базовая архитектура — парсер, планировщик, исполнитель и менеджер артефактов — уже закрывает основные потребности.

@zen_of_python

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

Zen of Python

Гвидо ван Россум рассказал о Structured RAG — подходе, когда мы не просто режем документ на куски и превращаем в векторные эмбединги, а заранее вытаскиваем из текста структурированные «знания» (сущности, типы, действия, связи) и храним их в обычной базе. На этапе запроса вопрос тоже приводится к такому же структурному виду, ищутся совпадения по полям, а при достаточном лимите токенов добавляются исходные фрагменты текста. По словам Гвидо, это даёт более точные ответы, выдерживает длинные диалоги и ускоряет сложные запросы.​

Почему это лучше классического RAG с векторами: векторы громоздки, по большим документам совпадения «размываются», а полнота (recall) заметно проседает; озвучена оценка порядка 60%. В Structured RAG основная работа переносится на этап индексации, поэтому сам поиск получается дешевле и легче масштабируется. Плюс можно делать простые выводы по типам (например, если кто-то указан как artist, то это person), что помогает отвечать на вопросы «кто из людей…».​

На демо Гвидо показывал поиск по скетчам Monty Python и по собственной почте: система умеет пополнять память на лету, так что к фактам и диалогам можно возвращаться спустя время. Эмбеддинги при этом используются минимально — как вспомогательный механизм для синонимов и родственных терминов; а GraphRAG здесь не конкурент, а соседний подход: Structured RAG выигрывает инкрементальной индексацией без тяжёлой кластеризации.​

Код открыт: пакет typeagent уже доступен на PyPI. Исходники лежат в репозитории. Это ранний прототип; для запуска нужен ключ к LLM‑провайдеру (в докладе — OpenAI).

В посте дубляж на русский, оригинал на YT.

@zen_of_python

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

Zen of Python

Бро, ты можешь тут реализоваться и т.д.

Став частью ОТП Банка, именно ты сделаешь сильнее всю команду! Расти, учись и пробуй новое — это твой шанс создать что-то по-настоящему крутое.

Присоединяйся к ребятам и делись роликом с теми, кто тоже готов к переменам 🚀

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

Zen of Python

В экосистеме Python есть несколько разных файлов, которые отвечают за зависимости: requirements.txt, uv.lock, pyproject.toml, да сами библиотеки установленные в venv в конце концов, это тоже некоторая фиксация зависимостей.

Всем этим можно управлять с помощью uv: на картинке граф переходов, как из одного набора перейти к другому. Сохраняйте как шпаргалку.

Под «libs in env» подразумевается виртуальное окружение, созданное с помощью uv venv.

@zen_of_python

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

Zen of Python

Свежий опен-сорс проект от Python-энтузиаста — httpmorp. Это HTTP‑клиент с фокусом на имитацию браузера. Автор заточил код для маскировки запросов, чтобы всё выглядело так, как будто их делает Chrome 142. При этом API максимально совместим с обычным requests: те же get/post, Session, cookies, и ставится обычным pip install httpmorph.

В проекте используется BoringSSL и nghttp2, чтобы TLS/HTTP2 сигнатуры совпадали с браузером. Есть поддержка асинхронных клиентов, пулов соединений и прокси с авторизацией. Цель инструмента — правдоподобная мимикрия TLS/HTTP, а не максимальная скорость; за перформансом лучше смотреть на httpx/aiohttp.​ Подробнее в документации.

Автор подчёркивает, что проект пока учебный и не для продакшена; из зрелых альтернатив рекомендует обратить внимание на curl_cffi. Тем не менее, инструмент полезен, если ваш скрипт блокируют несмотря на корректный User‑Agent.

@zen_of_python

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

Zen of Python

Цепочка поставок в Python — это путь ваших зависимостей из публичного реестра до проекта. То, что вы ставите через pip. Если по дороге попадаются уязвимости или подмена артефактов, а сборка автоматизирована, проблемы могут внезапно прилететь прямо в прод.

Есть такая компания Chainguard — всячески топят за то, что открытые источники это опасно и их хорошо бы сделать безопасными. Что они делают: пересобирает популярные пакеты PyPI в своей контролируемой среде и публикует их как более безопасные артефакты. Есть и отдельный индекс с бэкпорт‑исправлениями High/Critical CVE для старых версий, чтобы не переходить на мажорные апгрейды только ради патча безопасности.​

К сборкам прикладываются проверяемые метаданные: SBOM (понятный список компонентов пакета) и attestations/provenance (подписанное происхождение и способ сборки). Эти данные читают инструменты экосистемы, поэтому можно автоматически проверять, чем и где собран артефакт.​

Подключение обычно делают через репозиторий‑менеджер вроде Artifactory, Nexus или Cloudsmith: ставите Chainguard приоритетным источником, а PyPI оставляете как резерв. Так вы получаете «чистые» сборки там, где они есть, и не ломаете процесс там, где нужного пакета пока нет.

Подробнее в официальной документации.

Аналогичный проект есть у Аnaconda. И тоже платный.

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

А как вы решаете вопросы безопасности? Вас пугает толпа зависимостей проекта, за которой реально не так то просто уследить?

#поделитесь_своим_опытом
на @zen_of_python

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

Zen of Python

Python — единственный нормальный язык программирования

@zen_of_python

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

Zen of Python

Не ждали, а она тут — новая версия Python 3.14 🚀

Лучше просто кликнуть по ссылке сейчас и послушать краткий обзор от Евгения Афонасьева, тимлида разработки Antifraud в Авито, чем потом упускать полезные фичи и искать этот пост.

В ролике ребята разобрали, как небольшие обновления, так и те, что лучше внедрять в свою работу уже сейчас.

📺 Смотрите и обсуждайте по ссылке!

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

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

Zen of Python

В Python 3.14 появилось фишка, которая реально меняет дебаг live-процессов: безопасный внешний интерфейс отладки по PEP 768, который позволяет подключаться к уже запущенному питоновскому процессу по PID — без перезапуска и без ломания рантайма на ровном месте. В практическом виде это значит, что теперь можно сделать обычный attach встроенным pdb: python -m pdb -p <PID>, залезть внутрь, посмотреть состояние, выполнить код — как будто запускал под отладчиком с самого начала.​

Главная фишка — все происходит в «безопасных точках» интерпретатора, без хака с инъекцией машинного кода через ptrace/LLDB и без риска словить краш, гонки за GIL или порчу памяти при сборке мусора. Интерфейс кооперируется с eval loop CPython и просто просит интерпретатор выполнить небольшой скрипт, когда это безопасно; под капотом для этого добавили пару полей в PyThreadState и используют существующий eval_breaker, поэтому накладных расходов в обычном режиме нет.​

Для инструментов завезли sys.remote_exec(pid, path_to_script): можно подложить .py-файл и он выполнится в целевом процессе при первой возможности, что удобно для быстрых диагностик: распечатать стек, проверить состояние, собрать метрики, даже если это прод и процесс нельзя трогать. Момент важный для продакшена и безопасности: механизм можно отключить через переменные/флаги (PYTHON_DISABLE_REMOTE_DEBUG, -X disable-remote-debug, сборка без поддержки), а любые вызовы проходят через audit hooks, так что всё прозрачно и контролируемо для админов.​

Если хотите детали и хороший разбор, у surister вышел пост после выступления Пабло Галиндо (соавтора PEP): там с примерами, почему старые подходы были хрупкими, и как новый протокол делает attach нормальным инструментом, а не рулеткой с падениями.

Ещё раз супер-кратко: теперь attach к живому Python — это стандартная возможность CPython 3.14, с нулевой ценой в рантайме и без трюков уровня «инжектим код в произвольной точке», что сильно упрощает жизнь при отладке долгоживущих сервисов и edge/IoT кейсов.

А вы знали, что так можно?

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

Zen of Python

Как провести проверку типов в 1,8 миллионах строчек Python-кода за секунду? Нил Митчел рассказывает как новый тайп-чекер Pyrefly достигает такой скорости (дубляж на русский).

Аннотации типов появились ещё в 2014 году и с тех пор стали значительно сложнее: дженерики, подтипы, flow types, field refinement и другие не всем даже известные слова. Pyrefly моделирует и проверяет эту сложную систему и делает это быстро.

В принципе тем же самым занимается uv ty, но у ребят из Astral немного другой подход: дать пользу программисту аккуратно, не ошибиться случайно в коде, который хоть и без типов, но теоретически может быть валидным. Можно сказать, что Pyrefly более агрессивный и стабильный, хотя оба проекта ещё в альфе.

Попробовать можно прям на сайте проекта: pyrefly.org/sandbox

Что ж, наконец-то кто-то сможет угнаться за скоростью написания вайб-кода и проверить хотя бы типы.

@zen_of_python

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

Zen of Python

Какую версию Python взять, чтобы всё работало без лишних проблем?

С одной стороны, хочется более свежую: в 3.14 завезли free-threading и вообще много чего улучшили по производительности. Но не все библиотеки ещё подтянулись. Например, Numba ещё 3.14 не поддерживает.

Хороший совет — вооружитесь uv и последовательно пробуйте все версии начиная с самой свежей. Первая, которая заработает, и будет вашей. По сути самая свежая из тех, которую поддерживают все зависимости у вас в проекте.

Также полезно посмотреть на релизный цикл (на картинке к посту). Очевидно не стоит брать версии, которые уже не поддерживаются. Спускаться ниже 3.10 будет не самым безопасным вариантом. Ровно как и пробовать то, что ещё не выпущено официально — на 3.15 заглядываться рановато.

По состоянию на ноябрь 2025 версия 3.13 выглядит хорошей золотой серединой. Почти все уже успели добавить поддержку, а от ведущей 3.14 отставание всего на один шаг.

А какие версии вы используете у себя в проектах?

#обсуждение
@zen_of_python

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

Zen of Python

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

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

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

#обсуждение
@zen_of_python

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

Zen of Python

Обвязка вокруг SQLAlchemy Core — sqla-fancy-core. Это не очередной ORM, а надстройка для тех, кто любит писать запросы сам, но хочет строгую типизацию, поддержку асинхронности и понятные транзакции без «магии» сессий.

Главная фишка — другой способ описывать таблицы вместо table.c.column, который нормально дружит с проверкой типов и делает код понятнее. Плюс поверх движка добавлены обёртки и декораторы: они берут на себя создание подключений и управление транзакциями.

Пример:

import sqlalchemy as sa
from sqla_fancy_core import TableBuilder

tb = TableBuilder()

class Author:
id = tb.auto_id()
name = tb.string("name")
created_at = tb.created_at()
updated_at = tb.updated_at()

Table = tb("author")


Проект задуман под продакшен: для тех, кто хочет конструктор запросов вместо ORM, но без потери читаемости и безопасности. По словам автора, в отличие от Peewee тут есть аннотации типов и официальная работа с async, Piccolo менее гибкий и сильно навязан по архитектуре, а Pypika не защищает от SQL‑инъекций по умолчанию. В итоге это просто способ сделать SQLAlchemy Core чуть более строгим и удобным, не меняя стек целиком.

Есть отдельное демо по использованию.

@zen_of_python

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

Zen of Python

Вы знали, что у нас есть канал с хитрыми задачками по Python?

Вот прямо сейчас там в комментариях обсуждаем задачу с подвохом.

Каждый рабочий день по одной задачке с квизом, можно сразу проверить себя. И через час пост с подробным объяснением, почему именно так.

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

Zen of Python

С кем знакомятся типичные программисты: 2D-тян или живая девушка?

Согласно недавним исследованиям Vantage Point Counseling Services, треть американцев хотя бы раз состояла в романтических отношениях с ИИ. Появилось даже приложение Loverse для виртуальных знакомств, где вместо реальных людей роль партнёров выполняют чат-боты с искусственным интеллектом.

Мы решили провести своё исследование и выяснить где и с кем сегодня знакомятся пользователи стран СНГ. Пожалуйста, пройдите наш небольшой опрос. Это поможет нашему исследованию.

Пройти опрос.

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

Zen of Python

В этот четверг: онлайн-конференция «Проектная исповедь»

Что будет: разбор проектных ошибок в ИТ-индустрии и совместный поиск путей, как с ними справляться.

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

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

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

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

Zen of Python

ArgMan — легковесный менеджер аргументов командной строки для Python. Позиционируется как более простая замена argparse для небольших проектов.

Из коробки поддерживаются позиционные и опциональные параметры, короткие и длинные флаги вроде -v/--verbose, а также хуки для преобразования типов и валидации. Установка стандартная: pip install argman.

Сейчас не поддерживается парсинг из списка строк (не только из sys.argv) — автор обещает, что сначала допилит подкоманды, а затем добавит более универсальный парсинг. Исходники на GitHub, автор активно отвечает и готов вносить правки и дорабатывать.

На картинке к посту пример использования.

@zen_of_python

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

Zen of Python

Гвидо ван Россум дал интервью на Python-конфе PyBay

Основные темы:
— почему Python стал языком ИИ и что помогает ему быстро адаптироваться под новые задачи;
— надстройки типизации вроде Pydantic;
— функциональные примитивы а-ля lambda/map/reduce и отношение Гвидо к ним.

Ну и, конечно, про вайб-кодинг тоже поговорили.

В посте видео с дубляжом на русский, а оригинал на YT.

@zen_of_python

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

Zen of Python

Да, venv это круто и удобно, но есть проблемы:
— чтобы посмотреть какие внутри пакеты, надо активировать конкретное окружение;
— нет удобного способа посмотреть все venv и что в них творится;
— сколько всё это места на диске занимает непонятно.

Вас это тоже волнует? Нет? А вот один программист настолько устал вбивать постоянно activate бла-бла, что закодил venv-rs — менеджер виртуальных окружений для Python. Написан на Rust, работает быстро. Показывает все окружения в удобном виде прямо в терминале.

Главная фишка venv-rs в том, что это именно интерфейс с навигацией, а не просто набор CLI-команд. Можно быстро просмотреть список всех окружений, установленные пакеты в каждом, узнать размер на диске и скопировать команду активации в буфер одним нажатием. Инструмент рекурсивно ищет окружения в указанной папке и кэширует, чтобы при следующем запуске не тормозить.

В посте автора на Reddit есть сравнительная таблица с другими решениями вроде virtualenvwrapper, venv-manager и uv. Основное отличие — визуальный интерфейс вместо команд. Правда, venv-rs пока не умеет создавать и удалять окружения, только управлять существующими. Также есть нюансы: Mac не поддерживается, а первый запуск может быть долгим, если у вас много окружений с кучей пакетов.

@zen_of_python

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

Zen of Python

Вайб-кодинг

#постИИрония

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

Zen of Python

Узнали себя? Скорее всего вам нужно на «Проектную Исповедь»

Это не очередная строгая онлайн-конференция, а ежегодное откровение профессионалов в сфере ИТ. Вас ждут:

🔘 Честные истории о выгорании и сложных проектах;
🔘 Кейсы по управлению ресурсами без потери себя;
🔘 Воркшопы по расстановке приоритетов.

Среди самых активных и внимательных участников будут разыграны комплекты мерча для полной перезагрузки

Дата: 13 ноября в 11:00 | онлайн
Участие: бесплатно.

Регистрируйтесь, чтобы воссоединить рабочее и личное «я»: https://tprg.ru/SB5e

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

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

Zen of Python

OpenStax выложили кучу бесплатных учебников, и среди них есть «Introduction to Python Programming» — свежий вводный курс по Python для начинающих и тех, кто хочет подтянуть базу системно. Помимо него у них есть «Principles of Data Science» и ещё много книг по математике и программированию.​​

Книга интерактивная: в веб-версии есть встроенный OpenStax Python Code Runner, короткие видео-анимации, вопросы на понимание и практикумы прямо по ходу текста. Каждая секция компактная и по делу: цели обучения, 1–3 подпункта объяснения и 1–2 практических задания, чтобы закрепить без отрыва от браузера.​

По охвату она идёт от основ ввода-вывода, типов, выражений, условий и циклов к функциям, модулям, строкам/спискам/словарам, ООП и рекурсии, плюс файлы и исключения. В конце есть вводная по data science с NumPy, pandas, EDA и визуализацией; издано в 2024 и доступно под лицензией CC BY 4.0.​

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

PDF-версия прикреплена к этому посту.

@zen_of_python

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

Zen of Python

Вот хороший учебный проект по agentic RAG, который можно поднять локально без API‑ключей и облака: только Python, LangGraph и ваш комп. Автор собрал в одном месте весь пайплайн: от подготовки данных до рабочего агента, чтобы новичкам не рыскать по разрозненным гайдам и видео. В отличие от типичных туториалов «кусочками», здесь end‑to‑end реализация с минимальными зависимостями и упором на понятность и практичность.​

Что внутри по механике: конвертация PDF → Markdown, иерархическое разбиение на чанки, гибридные эмбеддинги, хранение в Qdrant, параллельная обработка мульти‑запросов, переформулировка вопросов и уточнения у человека при неоднозначностях. Контекст сжимается через саммари, а поверх всего — агент на LangGraph, который сам решает, когда переписать запрос, когда добрать родительские чанки, и когда генерировать ответ; есть простой чат‑интерфейс на Gradio.​

Фишка именно в «агентности»: это не линейный проект, а петля с проверками, где агент оценивает достаточность контекста, при необходимости расширяет поиск (например, поднимая родительский уровень чанков) и только потом отвечает. Такой подход лучше тянет сложные вопросы и снижает галлюцинации, потому что решение не зашито жёстко в пайплайн — агент сам выбирает следующий шаг.​

Кому зайдёт: если хочется руками понять, как склеиваются рассуждение, ретрив, переписывание запросов и память в реальном агенте — это ровно тот кейс. Репозиторий свежий и минималистичный; можно быстро форкнуть и адаптировать под свои документы.

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

Zen of Python

Совет управляющих Python одобрил два PEP — 798 про распаковку в comprehensions и 810 про явные ленивые импорты, оба целятся в Python 3.15.

PEP 798 добавляет возможность применять распаковку прямо в comprehensions и генераторах: можно использовать символы звездочки для объединения и слияния, например [*it for it in its] или {**d for d in dicts}. Приняли с оговоркой: и синхронные, и асинхронные генераторные выражения должны использовать явные циклы, без yield from, чтобы сохранить простой и единый стиль, ближе к поведению itertools.chain.from_iterable.

PEP 810 вводит явный синтаксис ленивых импортов: lazy import json и lazy from json import dumps, когда модуль реально загрузится только при первом обращении к имени — полезно для ускорения старта и экономии памяти. Совет уточнил детали: .pth не поддерживают ленивые импорты, появится sys.get_lazy_imports(), и будет зафиксирован приоритет между переменной окружения, флагом -X и вызовами sys.set_lazy_imports(), при этом стилистические правила сортировки оставят линтерам и форматтерам.

P.S. Кто такие эти ваши «совет управляющих»? После ухода Гвидо с роли BDFL в 2018 сообщество приняло модель управления PEP 8016 — стратегию языка и финальные решения по PEP принимает избираемый из core-разработчиков Совет из пяти человек. Этот Совет переизбирается после каждого мажорного релиза голосованием среди core-dev’ов и выступает финальным арбитром по спорным вопросам развития языка.

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

Zen of Python

Свежий пет-проект от (видимо) скучающего на досуге питониста — терминальный Git‑клиент на чистом Python, вдохновлённый LazyGit; ставится через pip и работает без внешнего git CLI. Попробовать: pip install pygitzen.

Что даёт: навигация по коммитам, просмотр diff, панель статусов файлов в стиле VSCode, ветко‑зависимая история и индикаторы «пушнуто/локально» без вызова системного git.​

Зачем: когда в окружении нельзя ставить ничего кроме Python‑пакетов, нужен «чисто Python» инструмент для Git с удобной навигацией и минимумом интеграций.​

Автор просит фидбек по недостающим функциям и удобству UI, так что можете отписаться в репозитории. Вам плюсик в карму, автор порадуется.

Проект, послуживший вдохновением: https://github.com/jesseduffield/lazygit

Ну и, конечно, кто-то написал аналог на Rust, чтобы было ультра-быстро, а скорее просто потому что может: https://github.com/gitui-org/gitui

Как вам такие поделки? Как минимум романтично же, консольные клиенты как будто пахнут старыми добрыми временами, вы не находите?

@zen_of_python

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

Zen of Python

Пользователь Reddit поделился Python-библиотекой для быстрых запросов к файловой системе и выполнения действий над найденными файлами.

Основная идея: вместо кучи строк кода, os.stat и datetime писать так:

query = Query(
where_expr=(AgeDays() > 7) & (Size() > "10 mb") & Suffix(".log"),
from_paths="C:/logs",
threaded=True
)
result_set = query.select()

Т.е. найти логи старше 7 дней и больше 10 МБ.

Выглядит удобно, но как-то не очень pythonic, вам не кажется? Как будто если делаешь что-то SQL-like, то лучше напрямую SQL и взять, а не изобретать мини-язык внутри Python. И это как раз самое интересное — в комментах начали предлагать как можно сделать лучше.

Например, вот так:
query(lambda p: p.age_days < 7 and p.size > 10_000_000 and p.suffix == ".log")

Добавить обёртку, которая будет вычислять необходимые свойства по запросу с использованием cached_property и получим по сути то же самое, но проще.

Или использовать модуль ast и такой синтаксис:
query("age_days < 7 and size > 10_000_000 and suffix == '.log'")


А может вообще что-то lisp-подобное:
query(("and", ("age_days", ">", 7),
("size", ">", 10_000_000),
("suffix", "==", ".log")))


Или добавить callable-объекты, которые можно передавать в фильтры, получится куда более нативно:
dir = pathlib.Path('/var')
for file in filter(OlderThan(days=7) & LargerThan(MB=10),dir.rglob("*")):
print(file.as_posix())


Лично мне, админу канала @zen_of_python, последний вариант кажется самым удобным. Не самый привычный синтаксис, но читается однозначно. И возможность задавать время и размер файлов в привычных единицах — тоже плюс.

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

А какой стиль вам больше понравился? Как бы вы реализовали?

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

Zen of Python

​​python-for-everyone/videos">Python for Everyone | Короткие видеотуториалы

Англоязычный YouTube-канал, прекрасно «грокающий» различные концепции языка, будь то декораторы, миксины или полиморфизм. Каждый ролик — кустарный мультфильм с демонстрацией предельно понятного кода.

#обучение
@zen_of_python

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