Все потоки
Поиск
Написать публикацию
Обновить
412.53

Python *

Высокоуровневый язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

Почему мы отказались от выражения «assert» в Python

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров12K

В текущем проекте на Python мы полностью отказались от использования выражений с ключевым словом assert, и в этой статье я расскажу почему.

Рассмотрим кейсы где использование выражений assert уместно, а где оно может выстрелить в ногу, и как этого избежать.

Читать далее

Стоит ли использовать Python venv в контейнере, таком как Docker? Определённо

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров8.2K

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

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

Читать далее

30 трюков на Python с описанием преимущества

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров17K

Причет, чемпионы! У меня тут нашлось время собрать коллекцию хитростей на python🐍 в примерах. Примеры давно копились у меня в черновиках, и вот делюсь! Это первая часть, поехали!

Изучить трюки 🐍

Lock-free кэш для Django: коротко

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров1.5K

Привет, Хабр!

Сегодня будем строить lock‑free кэш в Django, то есть без блокировок, но с атомарными операциями. Никаких замков, никакого ожидания, только скорость.

«Зачем, если есть Redis?» Вот три причины:

- Скорость локальной памяти. Redis — молодец, но сетевые запросы всегда медленнее RAM.
- Блокировки — зло. Даже Redis лочит ключи при записи, а это минус к скорости.
- Иногда скучно. Ну честно, написать что‑то своими руками.

А ещё это хороший способ разобраться, как работают атомарные операции и lock‑free структуры.

Читать далее

Брокеры сообщений на практике: как подключиться и пользоваться RabbitMQ в Python

Время на прочтение9 мин
Количество просмотров17K

Привет, Хабр! Умение работать с брокерами сообщений — едва ли не базовый навык для бэкенд‑разработчиков уровня Junior и Middle. В этом базовом материале по RabbitMQ посмотрим, как развернуть решение на собственном сервере, а также установим и настроим панель управления. Обычно эту задачу выполняет DevOps‑инженер, но ничего сложного нет и в самостоятельном администрировании. Главное — научиться качественно и грамотно обрабатывать сообщения, чтобы они не терялись, не считывались повторно, не оставались в брокере. Никаких ошибок ни в коем случае нельзя допускать, этим моментам тоже уделим внимание.
Читать дальше →

Быстрый старт в мир Python окружений с uv

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров38K

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

Читать далее

LangChain vs LlamaIndex: проектируем RAG и разбираемся, что выбрать для вашего проекта

Уровень сложностиПростой
Время на прочтение14 мин
Количество просмотров13K

Сегодня it-сообщество предлагает большое количество любопытных инструментов для создания RAG-систем. Среди них особенно выделяются два фреймворка —  LangChain и LlamaIndex. Как понять, какой из них подходит лучше для вашего проекта? Давайте разбираться вместе!

Читать далее

Создание персонального AI-ассистента с использованием RAG: пошаговое руководство

Уровень сложностиПростой
Время на прочтение10 мин
Количество просмотров12K

Не так давно стала задача создать персональный чат-бот ассистент для компании занимающейся интернет разработкой. Система должна была иметь как Backend, отвечающий за работу с локальной нейросетью, так и простой FrontEnd виджет на JavaScript, который можно подключить на любой из страниц компании. Ресурсов описывающих работу RAG-систем полно, однако руководств которые расскажут и поэтапно проведут разработчика через все необходимые шаги я не нашел. Тем самым постараюсь восполнить пробел в данной статье.

Читать далее

Django против N+1 запросов: оптимизация с помощью select_related и prefetch_related

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров1.8K

Привет, Хабр!

Сегодня рассмотрим проблему N+1 запросов в Django. N+1 запросы появляются, когда ваш код делает много мелких SQL-запросов вместо нескольких крупных.

Читать далее

Joblib: максимум из параллельных вычислений в Python

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров5K

Привет, Хабр! Сегодня разберемся с одной важной темой, которая может серьезно улучшить производительность Python-кода — параллельные вычисления с помощью Joblib.

Joblib — это Python-библиотека, которая предоставляет инструменты для параллельных вычислений, кэширования и эффективной обработки данных. Она используется для ускорения выполнения операций, таких как многократные вычисления, обработка больших массивов данных и параллельная обработка однотипных задач.

Читать далее

Книга: «Парсинг с помощью Python. Веб-скрапинг в действии. 3-е межд. изд.»

Время на прочтение7 мин
Количество просмотров8.9K
Привет, Хаброжители!

Недавно мы выпустили «Парсинг с помощью Python. Веб-скрапинг в действии», поэтому хотим поделиться рассказом об этой книге, который написал для своего блога на Medium Серхио Рамос.
Приятного чтения!
image

Читать дальше →

Как сделать SMS-оповещение о землетрясениях с GeoJSON и SMS API

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров813

Привет, Хабр! Слышали о землетрясениях, которые происходят каждый день по всему миру? Как правило, если вы не сейсмолог или не живёте рядом с тектоническим разломом, то вам всё равно. Но информировать людей о реальных катастрофах в их регионе очень важно, покажем пример такой системы оповещения через SMS.

Читать далее

Подружить Great Expectations с Impala: решение для больших данных

Время на прочтение7 мин
Количество просмотров597

Всем привет, меня зовут Ольга Вишницкая, работаю главным аналитиком данных в одном из департаментов Газпромбанка. Мы постоянно следим за развитием инструментов и технологий в области анализа данных, ищем и тестируем новые решения. И в какой-то момент один из наших стримов, который отвечает за качество данных, обратил внимание на Great Expectations (GX). Это отличная библиотека для анализа качества данных: от базовой валидации до сложного профилирования и автоматической генерации документации. 

Но при внедрении мы столкнулись с проблемой: GX официально не поддерживает Impala — наш основной SQL-движок для обработки данных в Hadoop. Сначала мы решили пойти обходным путем через pandas DataFrame, благо GX прекрасно с ним работает. На тестовых данных все выглядело многообещающе, однако DataFrame может обрабатывает только около 15 000 строк за раз. Данные нужно дробить на части и по результатам теста на действительно больших объемов, обработка растянулась больше чем на сутки, а часть возможностей библиотеки мы вообще потеряли.

Стало понятно — нужно возвращаться к идее использования Impala. Тем более что он обрабатывает те же объемы данных за считанные минуты. Оставалось только найти способ подружить его с GX. В документации GX ни слова о том, как запустить проверки через неподдерживаемый движок. Пришлось экспериментировать самим, и после серии проб и ошибок нашли решение. Решила им поделиться.

Читать далее

Ближайшие события

«Дебаггинг» резюме или как покорить сердце рекрутера

Время на прочтение5 мин
Количество просмотров28K

Поговорили с Денисом Хахалкиным, QA Lead — Wallarm, ex. Ozon — о том, как подготовить резюме для прохождения первичного отбора ресёрчерами и HR‑специалистами на российском рынке труда. Обсудили, как правильно выбрать опыт для включения в резюме, чтобы он был актуален для желаемой должности, почему не стоит врать в резюме и как и когда стоит упоминать о пройденных курсах и полученных сертификатах, чтобы не отпугнуть потенциальных работодателей.

Читать далее

6 разочарований при создании командного инструмента

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров1.2K

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

Пока скрипты распространялись по команде, приходилось значительно дополнять их и рефакторить: код разросся до 3000 строк. И все это делалось по личной инициативе и в свободное время.

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

Читать далее

Большое обновление CV-возможностей для фреймворка Simple

Уровень сложностиПростой
Время на прочтение14 мин
Количество просмотров1.7K

Добрый день! Представляю большое обновление CV-возможностей (ActiveCV 2.0) андроид-фреймворка Simple, о котором писал тут https://habr.com/ru/articles/720610/. Теперь ActveCV существует не параллельно разработке на обычных экранах, а является элементом экрана, таким как кнопка или надпись. Это не просто подход к дизайну, а совершенно другие возможности работы – совмещение логики экранов и обработки видеопотока.

Читать далее

Автоматизация тестирования мобильных приложений на Python с использованием Appium и Pytest. Пишем первый тест

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров3.1K

Автоматизация мобильных приложений на Python с использованием Appium и Pytest. Пишем первый тест

Активно начал изучать автоматизацию мобильных приложений на Appium + Pytest, но на просторах рунета не нашел нормальную документацию по построения проекта и запуска первых тестов. Решил написать данную статью.

Для начала работы необходимо настроить рабочее окружение. Для начала проверим установлен ли на вашей машине Python. Проверить это можно с помощью команды  python3 -V в терминале. Далее терминал должен вывести версию Python.

В моем случае Python установлен версии 3.13.0

Если после ввода в терминал команды python3 - V - терминал вывел command not found: python, то вам необходимо установить Python, сделать это можно следующими способами (необходимо установить в виртуальное окружение вашего проекта):
есть несколько способов установки, я остановился на менеджере пакетов для macOS - Homebrew.

Читать далее

tuple в CPython – мутабельный! И другие шокирующие детали из C-шной реализации

Уровень сложностиСложный
Время на прочтение8 мин
Количество просмотров9.2K

Привет! Меня зовут Никита Соболев, я core-разработчик языка программирования CPython, а так же автор серии видео про его устройство.

Я продолжаю свой цикл статей на хабре про детали реализации питона. Сегодня я хочу рассказать, как tuple устроен внутри.

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

Ну и конечно – мое полное видео на полтора часа, где будет множество дополнительной информации о деталях работы VM.

Если вам такое интересно или целиком незнакомо – добро пожаловать!

Читать далее

Пишем морской бой на VueJS и Python

Уровень сложностиСредний
Время на прочтение28 мин
Количество просмотров5.8K

Напишем всем известную игру на VueJS, Python и вебсокетах. Можно будет поиграть со случайным соперником и попробовать свои силы с другом.

Читать далее

Python и нечеткое сопоставление: решение проблемы разнобоя в адресах

Уровень сложностиПростой
Время на прочтение10 мин
Количество просмотров5.3K

Иногда приходится заниматься сравнением больших списков адресов, в которых адреса записаны совершенно по разному без внятных идентификаторов вроде номера объекта - есть только адрес. Один и тот же адрес может фигурировать в различных списках следующим образом:

📍 "д. Малое Шилово, ул. Березовая, д. 7" и "Березовая 7_М Шилово".
📍 "п. Ласьва, ул. Весенняя, д. 5" и "Весенняя 5_Ласьва".
📍 "Луговой пер 5, Краснокамск г" и "г. Краснокамск, пер. Луговой, 5".
📍 "д. Новая Ивановка, ул. Солнечная, 18" и "д.Новая Ивановка, ул.Солнечная, 18".

Уже выделенные отдельно адреса могут выглядеть как на скриншоте Экселя. А пример поставленной задачи может звучать так: «В реестре поданных объектов отметить все согласованные объекты (из общего списка согласованных)».

Если отбросить вариант ручного исполнения и обратиться к скриптам, то мне видится всего два решения:

✅ Использовать алгоритмы нечёткого сопоставления.
✅ Использовать геокодинг адресов.

Ищем приемлемый вариант сопоставления

Вклад авторов