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

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

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

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

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

Регистрация в перечне РКН: https://tprg.ru/xZOL
Download Telegram
Курс по автоматизации тестирования с помощью Selenium & Python

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

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

Ссылка на курс

#курс #qa #python #начинающим #ru
👍4
26 полезных приёмов и хитростей Python

Забираем статью, где рассказывается о полезных инструментах в Python, которые упрощают жизнь разработчикам, решая самые разные задачи — от визуализации данных до быстрого поиска ответов на вопросы.

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

#советы #python #ru
👍2
Интерактивный тренажёр по Python

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

Ссылка на питонтьютор

#курс #python #ru
❤‍🔥3❤2
Forwarded from Типичный программист
Microsoft открыла исходный код Python-либы для преобразования файлов в Markdown

MarkItDown — идеальное решение для конвертации файлов и офисных документов в Markdown. Подойдёт для анализа, индексации или упорядочивания данных.

Что поддерживает:

— PDF, PowerPoint, Word, Excel.
— Изображения (EXIF и OCR).
— Аудио (метаданные и транскрипция речи).
— HTML (включая специальную обработку Wikipedia).
— Text-based форматы: CSV, JSON, XML и другие.

Плюсом можно прикрутить LLM для описания изображений.

#инструменты #python #анализ
This media is not supported in your browser
VIEW IN TELEGRAM
👍3❤1
Флексим и создаём GUI на Python с веб-технологиями рендеренига

В этом нам поможет Flexx — набор инструментов, сделанных на чистом Python. Он позволяет писать код графических интерфейсов прямо на питоне и на ходу генерировать JavaScript с помощью транслятора PScript.

Узнать подробности о возможностях и изучить инструкцию можно на странице проекта.

#инструменты #python #javascript #gui
👍1
Курс по знакомству с Python

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

В этом курсе шаг за шагом объясняют основы: переменные, условия, функции, работа с логикой и даже немного графики. Всё через простые проекты — от секундомера до мини-игры.

Если давно хотелось «въехать» в программирование, но ждали какого-то знака — это он 🕊️

#курс #начинающим #python #ru
👍3✍1
Кроссплатформенные приложения на Python: весь путь от API до десктопа и веба

Не обязательно учить полдюжины языков и городить велосипед, чтобы собрать работающий кроссплатформенный продукт. В этой статье автор делится практическим опытом: как на одном только Python собрать backend на FastAPI, фронтенд на Flet, задеплоить всё это в облако и собрать под десктоп и веб.

По дороге — много интересных наблюдений и подводных камней: чем Flet радует, а где его кроссплатформенность пока только на бумаге, почему простые вещи лучше делать «без заморочек», а фанатам стоит готовить десятки гигабайт SDK и терпение.

Если вы уже освоились с Python и хотите попробовать собрать свой первый «всё‑в‑одном» проект, материал очень пригодится — от шаблонов кода до тонкостей деплоя и сборки.

А вы бы рискнули собрать свой API и фронт на Python, или сразу пошли бы во Flutter?

❤️ — «да, попробую»
🗿 — «лучше Flutter»!


#python #flet #fastapi #кроссплатформенность #разработка
❤9🌚2👍1🗿1
Создаём программу, которая сама умеет выбирать модели в зависимости от задачи

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

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

#python
👍2
Соберите первую нейросеть на Python без матана и видеокарты

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

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

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

#python
✍4
Соберите Discord-бота на Python и заодно разберитесь с асинхронностью

Со стороны бот выглядит сложно: отвечает на сообщения, помнит куски разговора, живёт круглосуточно. На деле это программа на Python, которая подключается к Discord, ждёт событие и решает, как на него ответить.

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

Туториал начинает с совсем маленького бота и наращивает по одной функции. Каждый шаг можно запустить и увидеть результат, а не ждать финала.

#python
Как выбрать между threading, asyncio и процессами, не переписывая код четыре раза

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

В руководстве Real Python одна и та же задача написана в четырёх версиях: синхронной, на потоках, на asyncio и на процессах. И так дважды: сначала для нагрузки, где программа ждёт ответа по сети, потом для той, где она считает. Восемь реализаций одной задачи.

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

#python
❤5
Питонисту советуют TypeScript ради типов, которые у него уже есть

У питониста в CI давно стоит mypy, а аргументы за TypeScript ему перечисляют те же: типы ловят ошибки до запуска, интерфейсы фиксируют форму объекта, вывод типов экономит аннотации. Из этого набора собран и гайд для питонистов на dev.to.

Разница начинается дальше, в судьбе самих типов. В TypeScript они стираются при компиляции, и входящий JSON всё равно приходится проверять руками или через zod. В Python аннотации остаются в объекте: их читает pydantic, на них держится валидация в FastAPI, один и тот же тип работает и в проверке схемы, и в разборе запроса.

Одни считают, что после mypy в TypeScript идти незачем: тот же контракт, только с npm. Другие говорят, что tsc дисциплинирует сильнее mypy, который на чужом коде молча сдаётся на Any.

А по вашему опыту?

#python
ffmpeg вернул нулевой код возврата, а видео на выходе оказалось битым

Внешние утилиты из Python проверяют обычно одинаково: subprocess.run(..., check=True), и раз исключения нет, значит всё получилось. С ffmpeg этого мало: он спокойно отрабатывает с нулевым кодом и отдаёт файл, собранный не из тех фрагментов, которые вы просили, а заметить это можно, только досмотрев результат до конца.

В ReelCraft, CLI на Python для сборки ролика из папки с фото и видео, такое случилось трижды: Gemini 3.7 Flash разбирает ассеты и предлагает список нарезки, ffmpeg режет по нему, оба этапа отчитываются об успехе. Что именно разъехалось в склейке и субтитрах, разбирает дев-лог автора.

Приём оттуда полезен и без видео: между выводом модели и вызовом ffmpeg лежит edl.yaml, который человек читает и подтверждает руками. И проверять после subprocess стоит артефакт, тем же ffprobe, а не код возврата.

#python
❤1
deepcopy копирует всё, до чего дотянется, включая то, что вы копировать не собирались

Знакомая поломка: конфиг сложили в словарь, сделали copy.copy, поправили вложенный список в клоне и увидели правку в оригинале. Новый контейнер получает те же ссылки на вложенные объекты.

copy.deepcopy идёт по графу рекурсивно и ведёт словарь memo: каждый скопированный объект запоминается по id. Циклическая ссылка поэтому не уводит копирование в бесконечность, а два поля, смотревшие на один список, в копии тоже смотрят на один. Плата — обход всего графа: объект, который держит открытый сокет или пул соединений, deepcopy либо уронит, либо утащит за собой пол-приложения.

Поведение настраивается методами __copy__ и __deepcopy__: класс сам решает, что воспроизвести заново, а что отдать по ссылке.

Разбор поверхностной и глубокой копии — в статье на dev.to.

#python
❤3
Сообщение об ошибке в Python подсказывает, где сломался код, если читать его с конца

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

Когда имя понятно, а причина нет, ставьте print перед подозрительным местом и сверяйте значения переменных с тем, что ожидали. Если print становится слишком много, включайте встроенный отладчик pdb: он останавливает программу в нужной точке и показывает значения прямо там. Хендбук freeCodeCamp по отладке разбирает имена ошибок подробнее и учит работать с pdb.

Возьмите ошибку, на которой застряли недавно, и разложите её по схеме: имя, пояснение, номер строки.

#python #основы
🥱5❤1👎1
asyncio учат до первого исключения внутри задачи, а дальше начинается импровизация

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

У Real Python есть разбор asyncio целиком, от корутин до выбора задач под них. Что в нём помимо привычного async/await:
• чем asyncio REPL (python -m asyncio) удобнее обёртки asyncio.run вокруг каждого эксперимента;
• как корутины стыкуются через asyncio.Queue, а не через цепочку await;
• что происходит с исключением, которое всплыло внутри задачи;
• в каких задачах asyncio выигрывает, а в каких только добавляет слой.

Открывать стоит ради последних двух пунктов: остальное вы, скорее всего, уже пишете руками.

#python
Как собрать Rust-проект с Python-модулем и отдельной программой

В пошаговом примере калькулятора одна функция сложения доступна из Python и из отдельной Rust-программы. PyO3 позволяет вызывать Rust-код из Python, maturin собирает расширение, а через uv устанавливают maturin и запускают сборку.

После установки модуля импорт в Python может работать, а cargo run — падать: PyO3 ищет Python, но глобальной установки нет или она настроена нестандартно.

В примере это исправляют через .cargo/config.toml: переменная PYO3_PYTHON указывает на .venv/bin/python. Так для запуска Rust-программы используется Python из виртуального окружения. В руководстве есть конфигурация сборки для обоих вариантов и проверки вызова функции.

#python
Как отличить отсутствие аргумента от None в Python

Если None — допустимое значение настройки, оно не подходит для обозначения «аргумент не передали». Маркер MISSING = object() решает эту задачу, но после deepcopy или pickle может превратиться в другой объект: проверка через is перестанет работать.

В Python 3.15 появляется встроенный sentinel. Объявление MISSING = sentinel("MISSING") даёт читаемую сигнатуру, позволяет использовать сам маркер в аннотации типа и сохраняет его идентичность при копировании.

Для pickle маркер должен быть доступен по имени в модуле: имя внутри sentinel обязано совпадать с именем переменной. Создавайте его один раз. Два вызова sentinel("MISSING") возвращают разные объекты, даже если строка одинакова.

#python #типизация
Как выполнять CPU-задачи в отдельных интерпретаторах Python

В Python 3.14 InterpreterPoolExecutor запускает потоки с отдельными интерпретаторами. У каждого свой GIL, поэтому вычисления на Python могут одновременно занимать несколько ядер в одном процессе.

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

Подход подходит для достаточно крупных вычислительных задач с простыми входами и выходами. На мелких операциях передачу данных легко сделать дороже вычислений. Перед переносом проверьте совместимость C-расширений и сравните время и память с ProcessPoolExecutor на реальной нагрузке.

#python #производительность
Почему цикл внутри теста скрывает часть ошибок

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

pytest.mark.parametrize превращает каждую пару «вход — ожидаемый результат» в отдельный тест. Без режима остановки на первой ошибке pytest проверит все случаи и покажет, какие именно сломались. Через ids им можно дать понятные имена.

Подготовку ресурсов удобно вынести в fixture с yield: код после yield выполнит очистку. Для ожидаемой ошибки используйте pytest.raises с конкретным типом и match, если важен текст сообщения. Иначе случайный ValueError из другой части функции может сделать тест зелёным.

#python #тестирование