pyproglib | Unsorted

Telegram-канал pyproglib - Библиотека питониста | Python, Django, Flask

39269

Все самое полезное для питониста в одном канале. Список наших каналов: https://t.me/proglibrary/9197 Курс по ML: https://cl Для обратной связи: @proglibrary_feeedback_bot По рекламе: @proglib_adv РКН: https://gosuslugi.ru/snet/67b885cbd501cf3b2cdb5b36

Subscribe to a channel

Библиотека питониста | Python, Django, Flask

🤖 Ваш ИИ-агент съедает бюджет на токены и падает при сбоях API?

Пора переходить на новый уровень. Открыли продажи курса по AgentOps — управлению ИИ-агентами в рабочих процессах.

Рынок требует инженеров, которые умеют:

• Контролировать метрики и качество ответов;
• Эффективно работать с RAG-архитектурой;
• Строить системы, готовые к реальным нагрузкам.

Обучение займет 6-12 недель под руководством практиков с опытом в AI и Data Science в крупных IT-компаниях, таких как Яндекс, Сбер, МТС, Huawei, Raft и др.

🎁 Можно подождать, пока про AgentOps начнут говорить все. Или зайти сейчас — НА 30% ДЕШЕВЛЕ!

Работа с AI начинается с систем.
Системы — с AgentOps.


🔥 Забрать скидку и изучить программу.

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

Библиотека питониста | Python, Django, Flask

Библиотека питониста

#развлекалово

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

Библиотека питониста | Python, Django, Flask

🔥Золотой стандарт по Computer Science

Фундаментальный курс по алгоритмам и структурам данных.

Если вы планируете изучать Computer Science самостоятельно или хотите освежить знания, эта программа охватывает всё: от анализа сложности до динамического программирования и теории графов.

🔗 Ссылка на лекции

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

Библиотека питониста | Python, Django, Flask

⚙️ Секретный файл .pdbrc

Мало кто знает, что при запуске PDB ищет файл .pdbrc в вашем домашнем каталоге или в текущей папке проекта.

В этом файле можно прописать алиасы — сокращенные команды, которые выполняют сложные цепочки Python-кода.

🛠 5 киллер-фич для вашего дебаггера

Добавьте эти строки в файл ~/.pdbrc, чтобы получить суперспособности при отладке:
1️⃣ `dir obj` — выводит все атрибуты и методы объекта в красивом формате, скрывая служебные «дандер»-методы (`__init__` и т.д.).
2️⃣ `attrs obj` — показывает только данные (атрибуты), игнорируя функции и методы. Идеально для осмотра состояния объекта.
3️⃣ `vars obj` — выводит только переменные экземпляра (то, что лежит в `__dict__`).
4️⃣ `src obj` — самая крутая фишка. Показывает исходный код функции или класса прямо в консоли дебаггера с указанием файла и строки.
5️⃣ `loc` — выводит список всех локальных переменных в текущем фрейме.

Представьте, что вы остановились на брейкпоинте и у вас есть объект c (экземпляр TextCalendar`). Вместо невнятного `<__main__.TextCalendar object...>, вы вводите:


(Pdb) attrs c
# Вывод:
c._firstweekday = 0
c.firstweekday = 0

(Pdb) src c.prmonth
# Вывод:
/path/to/calendar.py on line 404:
def prmonth(self, theyear, themonth, w=0, l=0):
print(self.formatmonth(theyear, themonth, w, l), end='')


🔗 Ссылка на полную статью

📍 Навигация: ВакансииЗадачиСобесы

Библиотека питониста

#буст

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

Библиотека питониста | Python, Django, Flask

🤯 Представьте, что ваш AI-агент работает так же предсказуемо, как обычный микросервис. Звучит утопически, но это именно то, к чему должна прийти разработка в 2026 году.

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

Наш обновлённый курс «Разработка AI-агентов» научит, как приручить этот хаос с помощью Python и современных фреймворков. Мы не будем учить «общаться» с нейросетью, мы будем строить из неё надёжный инструмент.

✅ Что вы получите:


— понимание того, как управлять логикой агента на уровне кода;
— навыки работы с LangChain и библиотеками оркестрации;
— готовые паттерны для обработки ошибок и галлюцинаций;
— опыт создания систем, которые реально экономят время.

Есть пара мест со скидкой до завтра, решайтесь 👈🏻

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

Библиотека питониста | Python, Django, Flask

🤔 Разрабатываете ИИ-агентов, но всё ещё не уверены в их стабильности и прогнозируемости?

Мы поговорили с десятками разработчиков ИИ-агентов и сделали отдельный курс по AgentOps.

🧠 На нём вы узнаете:

– как оптимизировать траты на токены;
– как на практике оценить качество работы агента;
– как «докручивать» RAG-системы без потери качества;
– как обеспечить устойчивость агента к сбоям внешних сервисов без падения всей системы и про многое-многое другое.

📅 Старт: 19 мая.

👥 Спикеры — практики с опытом в AI и Data Science в крупных IT-компаниях, таких как Яндекс, Huawei, МТС и др.

Длительность: 6-12 недель в зависимости от тарифа.


🔗 Программа курса и другие подробности

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

Библиотека питониста | Python, Django, Flask

Библиотека задач по Data Science

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

Библиотека питониста | Python, Django, Flask

это другое... вы не понимаете 😁

🐸 Библиотека питониста

#развлекалово

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

Библиотека питониста | Python, Django, Flask

Python 3.3, вышедшая в сентябре 2012 года, часто незаслуженно забывается на фоне громких релизов вроде 3.5 (async/await) или 3.10 (pattern matching). Однако именно эта версия заложила фундамент, на котором стоит современная разработка.

Вот три ключевые инновации, которые навсегда изменили экосистему Python.

1. yield from: фундамент асинхронности

До Python 3.3 объединение генераторов требовало написания громоздких циклов for. Инструкция yield from позволила одному генератору полностью делегировать работу другому.

🔛 Вместо ручного перебора значений, вы просто «пробрасываете» управление.
🔛 yield from автоматически обрабатывает передачу значений через .send() и проброс исключений внутрь цепочки.
🔛 Без этой механики появление async/await в будущем было бы невозможно. Ключевое слово await — это, по сути, синтаксический сахар над yield from.

2. venv: стандартизация окружений

До 3.3 разработчики зависели от стороннего инструмента virtualenv. Релиз 3.3 ввел модуль venv прямо в стандартную библиотеку.

🔛 Теперь создание изолированного окружения для каждого проекта стало встроенной функцией языка (`python -m venv env`).
🔛 Это убило проблему «на моей машине работает», сделав использование requirements.txt в связке с виртуальным окружением золотым стандартом индустрии.

3. Namespace Packages: пакеты без границ

Раньше каждая папка в Python должна была содержать файл __init__.py, чтобы считаться пакетом. Python 3.3 ввел неявные пространства имен (Implicit Namespace Packages).

🔛 Теперь один логический пакет (например, `company.tools`) может быть физически разбит на несколько разных репозиториев или директорий.
🔛 Это упростило жизнь разработчикам плагинов и больших распределенных библиотек, избавив их от конфликтов при совпадении имен корневых папок.

🔗 Ссылка на полную статью

📍 Навигация: ВакансииЗадачиСобесы

Библиотека питониста

#буст

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

Библиотека питониста | Python, Django, Flask

🐍 Как сделать свой объект итерируемым в Python через `__getitem__`

В Python итерируемый объект — это любой объект, по которому можно пройтись в цикле for. Обычно это списки, строки, словари… но вы можете создать свой собственный!

👇 Секрет — метод `__getitem__`

Если ваш класс поддерживает доступ по индексам (`obj[0]`, obj[1] и т.д.), Python автоматически сможет итерироваться по нему.

Пример: арифметическая последовательность


class ArithmeticSequence:
def __init__(self, start: int, step: int, total: int) -> None:
self.start = start
self.step = step
self.total = total

def __getitem__(self, index: int) -> int:
if not 0 <= index < self.total:
raise IndexError(f"Invalid index {index}.")
return self.start + index * self.step


Использование:

seq = ArithmeticSequence(5, 3, 6)

print(seq[3]) # 14

for value in seq:
print(value, end=", ")
# 5, 8, 11, 14, 17, 20,


💡 Почему это работает?
Python просто пытается вызывать __getitem__(0), __getitem__(1), `__getitem__(2)`…
И продолжает, пока не получит IndexError.

⚠️ Важно:
Если вы выбрасываете другую ошибку (например, `KeyError`), итерация сломается.

Пример неправильной реализации:

class DictWrapper:
def __init__(self, values):
self.values = values

def __getitem__(self, index):
return self.values[index]


Здесь Python не понимает, когда остановиться — и падает с ошибкой.

📍 Навигация: ВакансииЗадачиСобесы

Библиотека питониста

#буст

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

Библиотека питониста | Python, Django, Flask

🧱 Cложность AsyncIO

Мы нашли интересную статью, в которой автор выделяет несколько фундаментальных проблем стандартной библиотеки Python:
– Огромное количество абстракций (Handle, Future, Task, Protocol, Transport). Мало кто может внятно объяснить разницу между ними.
– Дизайн asyncio завязан на идее «одного главного потока», что выглядит анахронизмом в эпоху Python без глобальной блокировки интерпретатора.
– Почему для работы с сокетом нужно вызывать методы цикла событий? Дизайн кажется перегруженным.

Вместо нагромождения объектов, TonIO сводит всё к двум сущностям: Event (Событие) и Waiter (Ожидающий).
1. Event: Простая обертка над атомарным флагом.
2. Waiter: Связующее звено между точкой приостановки (корутиной) и событием, которого она ждет.

Когда корутина доходит до await, она порождает Waiter, который регистрируется в цикле. Как только событие происходит (флаг меняется), Waiter «просыпается» и ставит корутину обратно в очередь на исполнение. Никаких «фьючерсов» в классическом понимании.

TonIO спроектирован в стиле Rust-библиотеки Tokio:
🔛 С помощью одного декоратора @tonio.main ваш код запускается на всех доступных ядрах процессора.
🔛 Главный поток Python (Main Thread) занимается исключительно низкоуровневым вводом-выводом (I/O). Весь прикладной код пользователя выполняется в отдельном пуле потоков. Вы больше не привязаны к «особому» главному потоку.

Готовы ли вы отказаться от совместимости со старыми библиотеками ради кратного роста производительности на современных многоядерных процессорах? 👇

📍 Навигация: ВакансииЗадачиСобесы

Библиотека питониста

#буст

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

Библиотека питониста | Python, Django, Flask

✌🏻 У нас две новости — хорошая и плохая!

Хорошая: Ваших знаний, скорее всего, хватит, чтобы собрать рабочую демку AI-агента в Colab. 🫡

Плохая: Вы вряд ли выведете его в прод, не обанкротившись на токенах и не слив базу. 🤯

Для защиты от таких сценариев мы полностью пересобрали курс «Разработка AI-агентов». Теперь внутри плотная работа с экономикой ресурсов, дебаг через time-travel в LangGraph, извлечение данных из кривых сканов для RAG и комплаенс по 152-ФЗ.

Если всё ещё сомневаетесь, послушайте голосовое от спикера курса Влада Прошинского, где он объясняет, как правильно тестировать агентов перед релизом.


Программа курса, полный состав спикеров и другие подробности 👈🏻

ВАЖНО! До 5 апреля на курс действует скидка, но свободные места могут закончиться раньше.

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

Библиотека питониста | Python, Django, Flask

⚡️ Срочно: Python Steering Council официально утвердил PEP 804 — «Strict Logic Mode»

В ветку Python 3.15.0a8 (релиз ожидается на следующей неделе) внезапно добавили механизм Boolean Enforcement, который вызвал бурю обсуждений в почтовой рассылке core-разработчиков.

Что меняется:
Интерпретатор теперь будет выдавать RuntimeWarning, если вы используете «неявное» приведение к bool в условиях.

Пример «устаревшего» кода:


items = []
if not items: # Теперь это вызовет Warning: "Implicit empty list evaluation"
print("Empty")


Как нужно писать теперь (Strict Style):

if len(items) == 0: # Официально одобренный синтаксис
print("Empty")


Гвидо ван Россум в своем блоге пояснил, что это первый шаг к отказу от философии «Duck Typing» в пользу «Explicit Logic». По его словам, это позволит JIT-компилятору оптимизировать байт-код на 0.04% быстрее, так как ему не нужно проверять магический метод __bool__ у объектов в каждом if.

Разработчики Django уже заявили, что им придется переписать около 400 000 строк кода, а автор библиотеки Pydantic просто скинул в чат эмодзи с горящим домом.

📍 Навигация: ВакансииЗадачиСобесы

Библиотека питониста

#буст

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

Библиотека питониста | Python, Django, Flask

🤝 3 признака дружелюбного класса

Чтобы класс не вызывал раздражения при использовании, он должен обладать тремя качествами:

1️⃣ Понятные аргументы: конструктор (`__init__`) принимает только то, что действительно нужно для создания объекта.
2️⃣ Красивое строковое представление: реализация метода __repr__. Вместо <Point object at 0x...> вы должны видеть Point(x=1, y=2, z=3). Это критично для логирования и отладки.
3️⃣ Логичное сравнение: реализация __eq__. По умолчанию Python сравнивает объекты по адресу в памяти. В дружелюбном классе два объекта с одинаковыми данными должны быть равны (`p1 == p2`).

⚡️ Dataclasses: дружелюбность «из коробки»

В современных версиях Python (3.7+) лучший способ создать дружелюбный класс — использовать декоратор @dataclass. Он автоматически генерирует методы __init__, __repr__ и __eq__ за вас.


from dataclasses import dataclass

@dataclass
class Point:
x: float
y: float
z: float


Результат: вы написали 5 строк кода, но получили функционал, на который вручную ушло бы 15. Это экономит время и страхует от опечаток.

🛠 Когда можно быть «недружелюбным»?

➡️ Сравнение: Не нужно добавлять __eq__ для объектов, у которых нет состояния (например, соединение с БД или логгер). Там важна идентичность объекта, а не равенство данных.
➡️ Строковое представление: Если у объекта нет значимых данных для показа (например, итератор enumerate`), стандартный `__repr__ вполне уместен.

Если класс должен уметь что-то специфическое, используйте другие магические методы (dunder methods):
➡️ __iter__: позволит распаковывать объект как кортеж (`x, y, z = point`).
➡️ __add__ / __sub__: если вы хотите складывать или вычитать объекты (например, векторы).

Главный совет: Используйте dataclasses как мерило. Если ваш обычный класс менее удобен, чем аналогичный @dataclass, значит, его пора «подружить» с пользователем.

📍 Навигация: ВакансииЗадачиСобесы

Библиотека питониста

#буст

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

Библиотека питониста | Python, Django, Flask

загадки разработчиков 😁

🐸 Библиотека питониста

#развлекалово

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

Библиотека питониста | Python, Django, Flask

🚀 Сборная-солянка шпаргалок по питону

📍 Навигация: ВакансииЗадачиСобесы

Библиотека питониста

#буст

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

Библиотека питониста | Python, Django, Flask

🚀 Great Docs: документация без лишних усилий

Главная идея Great Docs - инверсия подхода. Вместо того чтобы вы строили систему сборки под код, инструмент сам инспектирует ваш пакет и создает всё необходимое «из коробки».

Процесс максимально упрощен и требует всего трех команд:


# 1. Установка
pip install great-docs

# 2. Инициализация (автодетект пакета и создание конфига)
great-docs init

# 3. Сборка и предпросмотр
great-docs build
great-docs preview


Все настройки хранятся в одном файле great-docs.yml. Вам не нужно изучать сложные системы шаблонов — достаточно указать стиль навигации или путь к логотипу.

🤖 В 2026 году документация нужна не только людям, но и нейросетям. Great Docs учитывает это и автоматически генерирует файлы llms.txt и llms-full.txt.

Это позволяет LLM-ассистентам и ИИ-агентам мгновенно «изучать» ваш пакет и помогать пользователям писать код с его использованием.

🔗 Ссылка на библиотеку

📍 Навигация: ВакансииЗадачиСобесы

Библиотека питониста

#буст

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

Библиотека питониста | Python, Django, Flask

🔥 Основы PyTorch: первые шаги в практическом глубоком обучении

Введение в основы PyTorch: инициализация тензоров, операции над ними, индексация и изменение формы (reshaping).

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

📍 Навигация: ВакансииЗадачиСобесы

Библиотека питониста

#буст

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

Библиотека питониста | Python, Django, Flask

📉 Минус 3.2 ГБ оперативной памяти: 5 техник оптимизации Python-приложений

Многие считают, что Python «прожорлив» к памяти по умолчанию. Но часто проблема не в языке, а в архитектуре.

Вот 5 рабочих техник, которые помогли добиться такого результата:

1. Переход на Async и один воркер (Granian + Quart)

Традиционные синхронные серверы используют «веб-сад»: несколько процессов-воркеров, каждый из которых дублирует зависимости в памяти.

Решение: Переход на асинхронный фреймворк (Quart) и современный сервер (Granian). Асинхронность позволяет одному воркеру эффективно обрабатывать множество запросов, что позволило сократить количество процессов до одного без потери производительности.

2. Паттерн Raw + Dataclasses (вместо тяжелых ODM)

Библиотеки вроде MongoEngine или SQLAlchemy могут быть тяжелыми для памяти при больших объемах данных.

Решение: Использование «сырых» запросов к БД и простых Python-датаклассов с использованием __slots__. Это исключает создание словаря __dict__ для каждого объекта, экономя около 100 МБ на процесс.

3. Изоляция тяжелых импортов в подпроцессах

Если у вас есть фоновый демон (например, поисковый индексатор), он может тянуть в память всё основное приложение просто из-за цепочки импортов.

Решение: Вынесение тяжелого кода в отдельный файл, который запускается как subprocess. Основной процесс остается «легким» (22 МБ вместо 708 МБ), а тяжелые библиотеки выгружаются из памяти сразу после завершения задачи.

4. Локальные (Lazy) импорты

Импорт популярных библиотек стоит дорого сразу «на входе».

Решение: Перенесите import внутрь функций. Библиотека загрузится только в момент вызова. В Python 3.15 эта механика станет еще проще благодаря PEP 810.

5. Кэширование на диске (Diskcache)

Хранение кэша (фрагменты HTML, результаты API) в оперативной памяти — самый простой путь к утечкам и раздуванию процесса.

Решение: Библиотека diskcache. Она использует SQLite под капотом, позволяя хранить гигабайты кэша на диске с производительностью, близкой к RAM, но не занимая драгоценную оперативную память.

🔗 Ссылка на полную статью

📍 Навигация: ВакансииЗадачиСобесы

Библиотека питониста

#буст

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

Библиотека питониста | Python, Django, Flask

Библиотека задач по Data Science

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

Библиотека питониста | Python, Django, Flask

🕵️‍♂️ pywho: команда, которая знает о вашем Python всё

Каждый разработчик проходил через ад отладки, когда import requests внезапно выдает ошибку, а which python показывает совсем не то, что вы ожидали.

pywho — это «детектор лжи» для вашего окружения. Одна команда заменяет копание в sys.path и проверку переменных окружения.

Что умеет pywho

1. Полная инспекция среды (`pywho`)
Мгновенно показывает: какой интерпретатор запущен, версию Python, архитектуру и — самое главное — тип виртуального окружения (`venv`, uv, conda, poetry или `pipenv`).

2. Трассировка импорта (`pywho trace <module>`)
Отвечает на вопрос: «Откуда именно загрузился этот пакет?». Инструмент показывает полный путь к файлу и весь порядок поиска в sys.path.

3. Поиск «теней» (`pywho scan .`)
Обнаруживает классическую ошибку, когда ваш файл (например, json.py или `math.py`) перекрывает стандартную библиотеку Python. Это одна из самых частых причин странных багов у новичков.

Установка: pip install pywho
(Важно: устанавливайте в то окружение, которое хотите проверить).

📍 Навигация: ВакансииЗадачиСобесы

Библиотека питониста

#буст

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

Библиотека питониста | Python, Django, Flask

👇 Нашли классный материал и точно стоит им поделиться.

Это структурированный PDF с 84 задачами по Python с решениями, который отлично подойдёт для практики и быстрого ревью.

Что внутри:
• разнообразные задачи разного уровня
• понятные решения
• удобная структура для постепенного обучения

📍 Навигация: ВакансииЗадачиСобесы

Библиотека питониста

#буст

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

Библиотека питониста | Python, Django, Flask

📦 pixi: Универсальный менеджер пакетов для Python и C++

Если вы работаете в Data Science или AI, то наверняка сталкивались с «болью» системных зависимостей. Популярный сейчас uv невероятно быстр, но он бессилен, когда нужно установить не просто Python-библиотеку, а скомпилированные C++ пакеты (например, GDAL для геоданных или CUDA для GPU).

В чем проблема uv

Он управляет только пакетами из PyPI. Если вашему проекту нужны системные библиотеки, их приходится ставить вручную через apt-get или brew. Это рушит воспроизводимость: ваш коллега на другой ОС может потратить часы, пытаясь собрать окружение.

Почему стоит присмотреться к pixi

Это современная альтернатива conda, написанная на Rust, которая объединяет лучшее из миров uv и conda:
✅ Ставит и Python-пакеты (PyPI), и скомпилированные системные библиотеки (conda-forge) одной командой.
✅ Работает в 10–100 раз быстрее стандартной conda.
✅ В pixi.lock фиксируются абсолютно все зависимости, включая системные библиотеки, что гарантирует идентичность окружения на любом компьютере.
✅ Забудьте про сложные Makefile. Вы можете прописать команды запуска (train, test, preprocess) прямо в конфиге.
Одна команда pixi install разворачивает проект на Windows, macOS и Linux без «танцев с бубном».

👇 Подробный разбор и примеры настройки — в статье.

📍 Навигация: ВакансииЗадачиСобесы

Библиотека питониста

#буст

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

Библиотека питониста | Python, Django, Flask

🐍 Простой Python Cheatsheet… но неожиданно мощный

Наткнулись на него и решили — точно стоит поделиться 👇

Он максимально:
• чистый
• структурированный
• без лишней воды

📍 Навигация: ВакансииЗадачиСобесы

Библиотека питониста

#буст

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

Библиотека питониста | Python, Django, Flask

📚Напоминаем про наш полный курс «Самоучитель по Python для начинающих»

Мы написали и собрали для вас в одну подборку все 25 глав и 230 практических заданий!

🐍 Часть 1: Особенности, сферы применения, установка, онлайн IDE
🐍 Часть 2: Все, что нужно для изучения Python с нуля – книги, сайты, каналы и курсы
🐍 Часть 3: Типы данных: преобразование и базовые операции
🐍 Часть 4: Методы работы со строками
🐍 Часть 5: Методы работы со списками и списковыми включениями
🐍 Часть 6: Методы работы со словарями и генераторами словарей
🐍 Часть 7: Методы работы с кортежами
🐍 Часть 8: Методы работы со множествами
🐍 Часть 9: Особенности цикла for
🐍 Часть 10: Условный цикл while
🐍 Часть 11: Функции с позиционными и именованными аргументами
🐍 Часть 12: Анонимные функции
🐍 Часть 13: Рекурсивные функции
🐍 Часть 14: Функции высшего порядка, замыкания и декораторы
🐍 Часть 15: Методы работы с файлами и файловой системой
🐍 Часть 16: Регулярные выражения
🐍 Часть 17: Основы скрапинга и парсинга
🐍 Часть 18: Основы ООП – инкапсуляция и наследование
🐍 Часть 19: Основы ООП – абстракция и полиморфизм
🐍 Часть 20: Графический интерфейс на Tkinter
🐍 Часть 21: Основы разработки игр на Pygame
🐍 Часть 22: Основы работы с SQLite
🐍 Часть 23: Основы веб-разработки на Flask
🐍 Часть 24: Основы работы с NumPy
🐍 Часть 25: Основы анализа данных с Pandas

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

Библиотека питониста | Python, Django, Flask

🚀 ironkernel: сила NumPy, производительность Rust и свобода от GIL

Если вам знакома ситуация, когда NumPy перестает справляться, а писать расширения на C++ или Rust вручную слишком долго, обратите внимание на ironkernel. Это библиотека, которая позволяет писать выражения на Python (DSL), а исполнять их параллельно на Rust через движок Rayon.

Проект объединяет два мира:
1. Python DSL: Вы пишете привычный код с использованием декораторов или выражений.
2. Rust Engine: Код компилируется в промежуточное представление (IR), после чего Python отпускает GIL, и Rust задействует все ядра процессора для вычислений.

Самый простой способ — использовать декоратор @kernel.elementwise. Он превращает обычную функцию в параллельный кернел:


import numpy as np
from ironkernel import kernel, rt

@kernel.elementwise
def saxpy(a, x, y):
return a * x + y

# Подготовка данных
bx = rt.asarray(np.arange(1_000_000, dtype=np.float64))
by = rt.asarray(np.ones(1_000_000, dtype=np.float64))

# Запуск в Rust-рантайме (GIL отпущен!)
task = rt.go(kernel.map(saxpy, a=2.0, x=bx, y=by))
result = task.result().numpy()


Авторы пошли дальше и внедрили в Python каналы в стиле Go (`chan` и `select`). Это позволяет строить конвейеры данных, где результат одной задачи передается в другую без лишних блокировок.


out_ch = chan(4)
# Результат вычисления сразу летит в канал
rt.go(kernel.map(double, x=src), out=out_ch)
buf = out_ch.recv() # Получаем данные асинхронно


🔗 Ссылка на проект

📍 Навигация: ВакансииЗадачиСобесы

Библиотека питониста

#буст

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

Библиотека питониста | Python, Django, Flask

🐍 25 лет «бага» в Python, который никто не исправил

1 апреля 2026 года исполнился ровно 9731 день с момента, как сообщество Python узнало о… странности в работе со строками.

Суть проста:


"42 monkeys" + "1 snake"


возвращает

"42 monkeys1 snake"


хотя «логичнее» было бы получить что-то вроде:

"41 monkeys and 1 fat snake"


Ещё в 1999 году разработчик Jim Fulton указывал на эту проблему. Прошли десятилетия, сменились версии Python — но «исправления» так и не появилось.

Автор статьи решили разобраться и «починить» это сами:
— начали с конкатенации строк (`PyUnicode_Concat`)
— затем добрались до .join()
— столкнулись с format, f-строками и даже конкатенацией на этапе компиляции

В итоге стало понятно: дело не в вычислении — а в отображении.

Финальный «фикс» — перехват вывода через print и REPL (`sys_displayhook`).

Теперь независимо от способа объединения строк:


print("42 monkeys" + "1 snake")


получаем:

"41 monkeys and 1 fat snake"


(если убрать print — магия исчезает 😄)

Вывод:
иногда проще изменить то, как мы видим результат, чем сам результат. И да — это отличный повод покопаться в исходниках Python.

📍 Навигация: ВакансииЗадачиСобесы

Библиотека питониста

#буст

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

Библиотека питониста | Python, Django, Flask

новая реальность 🤪

🐸 Библиотека питониста

#развлекалово

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

Библиотека питониста | Python, Django, Flask

🛠 Проблема: «грязные» тестовые данные

Когда вы тестируете функции, работающие с многострочным текстом, JSON или сложными объектами, декоратор @pytest.mark.parametrize быстро превращается в «простыню» текста.

Основные боли:
- Нарушение отступов: Многострочные строки (`"""`) ломают структуру кода.
- Дублирование логики: В каждом тесте приходится вызывать textwrap.dedent или Path().read_text().
- Нечитаемые ID: По умолчанию pytest генерирует ID теста из самих данных. Если данных много, лог тестов превращается в хаос.

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

1. Умная обработка данных

Ваш хелпер может сам решать, что перед ним: путь к файлу или текст.


def nb_case(text, short, long, id=None):
if "\n" in text:
# Это текст: убираем лишние отступы
text = textwrap.dedent(text.lstrip("\n"))
else:
# Это путь: читаем файл
id = id or text
text = Path(text).read_text()

# Возвращаем специальный объект pytest.param
return pytest.param(text, short, long, id=id)


2. Использование pytest.param

Главный секрет — возвращать не просто кортеж, а pytest.param.

Это позволяет:
- Назначать понятные ID (имена тестов).
- Добавлять метки (например, `marks=pytest.mark.xfail`) к конкретным наборам данных.

🔗 Ссылка на статью

📍 Навигация: ВакансииЗадачиСобесы

Библиотека питониста

#буст

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

Библиотека питониста | Python, Django, Flask

🧱 Clojure vs Python & R: новый взгляд на манипуляцию данными

Если вы привыкли к Pandas или dplyr, переход на Clojure с библиотекой tablecloth может показаться прыжком в другую вселенную. Но именно здесь раскрывается истинная мощь функционального программирования.

⚖️ Главное отличие: иммутабельность

В Pandas выполнение df.rename() или добавление колонки часто мутирует (изменяет) исходный объект. В Clojure любой датасет неизменяем.

— Каждая операция возвращает новый объект.
— Вам больше не нужно держать в голове текущее состояние переменной — код становится предсказуемым и легким для тестирования.

Clojure использует «потоковый макрос» -> (threading macro), который работает как пайп |> в R или цепочки методов в Python.

Задача: Отфильтровать пингвинов тяжелее 3800г и оставить только длину клюва.

Pandas: ds[ds["mass"] > 3800]["bill_length"]

tablecloth:


(-> ds
(tc/select-rows #(> (% "mass" 0) 3800))
(tc/select-columns "bill_length"))


Clojure — строго типизированный язык в плане операций. В отличие от R, он не будет молча сравнивать nil с числом.
Попытка сравнить (> nil 3800) вызовет ошибку.

Решение: Нужно явно указывать значение по умолчанию, например (% "col" 0). Это заставляет аналитика осознанно обрабатывать пропуски, а не полагаться на «магию» библиотеки.

🧬 Функции как «граждане первого класса»

В Clojure функции — это всё. Вы можете передать набор (set) как фильтр для колонок:

#{"year" "sex"} — это функция, которая проверяет наличие элемента.
(tc/select-columns ds (complement #{"year"})) — выберет всё, КРОМЕ колонки year. Чистая математическая логика в коде.


📈 Группировка (Group-by)

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

🔗 Ссылка на блог

📍 Навигация: ВакансииЗадачиСобесы

Библиотека питониста

#буст

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