39269
Все самое полезное для питониста в одном канале. Список наших каналов: https://t.me/proglibrary/9197 Курс по ML: https://cl Для обратной связи: @proglibrary_feeedback_bot По рекламе: @proglib_adv РКН: https://gosuslugi.ru/snet/67b885cbd501cf3b2cdb5b36
🤖 Мы тут подготовили небольшую игру по ИИ-агентам
В ней нужно собрать AI-агента на LangGraph: выбрать узлы, пройти развилки и запустить собственный workflow.
Никакой теории — сразу практика. Можно наглядно увидеть, как работают агентные системы, проверьте свои знания или показать другим как это всё работает 🔥
🎁 За прохождение получите персональную скидку на курс. Чем больше баллов наберете — тем больше будет скидка.
Плюс сейчас действует предложение: покупаешь 1 курс, получаешь еще 2 любых в подарок. Для этого надо будет оставить заявку на сайте академии после прохождения игры.
🚀 Собрать своего AI-агента
Библиотека питониста
#развлекалово
Pyodide 314.0: Python в браузере стал по-настоящему взрослым
Вышел Pyodide 314.0, и это не просто очередной релиз. Несколько важных изменений которые меняют экосистему.
Главное: PEP 783 принят
Теперь пакеты для Pyodide можно публиковать прямо на PyPI — как обычные wheels для Linux, macOS или Windows. Раньше команда Pyodide вручную собирала и хостила 300+ пакетов. Теперь это головная боль авторов пакетов, а не мейнтейнеров проекта.
Для установки пакета в браузере достаточно:
import micropip
await micropip.install("ваш-пакет")
ssl, sqlite3, lzma вернулись в стандартную библиотеку — больше не нужно устанавливать отдельноcompression.zstd из Python 3.14JsBigInt — числа больше 2^53 теперь корректно передаются между Python и JavaScriptusing из JavaScript Resource Management proposal:
{
using proxy = pyodide.runPython("some_object()");
// объект автоматически уничтожается при выходе из блока
}
🎥 До открытого урока — несколько дней. Подготовили небольшую подборку материалов от нашего спикера Дмитрия Юдина.
Дмитрий руководит AI/ML-направлением в Сloud․ru и развивает Evolution AI Factory — среду для работы с GenAI: от инфраструктуры обучения LLM до внедрения интеллектуальных агентов.
С чего начать:
📺 AI-инструменты для разработчиков — как код, автотесты и ассистенты меняют рутину инженера.
📺 AI-эволюция бизнеса в эпоху генеративных моделей — агентные системы в реальных продуктах.
📺 Разработка мертва? — дискуссия о будущем профессии и роли AI в ней.
📖 Применение LLM в бизнесе — статья Дмитрия о практике внедрения и роли облака.
Одна из ключевых тем Дмитрия — практическое применение агентных систем и их ограничения.
Именно об этом — бесплатный урок 18 июня в 19:00: «Мультиагентные системы: почему большинство архитектур переусложнены» 🔥
🎁 Для участников подготовили промокод на скидку 10 000 ₽ на курс «Разработка ИИ-агентов».
👉 Успей занять место на открытом уроке
💻 3 курса по цене одного — собери стек для оффера в топовую IT-компанию
Для следующего карьерного шага мало писать код. Работодатели ждут не только знания языка, но и понимания архитектуры, алгоритмов, автоматизации, AI-инструментов и агентных систем.
Одно направление закрывает только часть задачи.
Поэтому сейчас мы предлагаем освоить сразу несколько востребованных навыков — выбери любой курс и получи доступ еще к двум бесплатно 🔥
Собери стек навыков под свою цель:
🔹 подготовка к сильным компаниям (алгоритмы, архитектура);
🔹 переход в AI-направление (ИИ-агенты, AgentOps);
🔹 развитие в ML и Data Science (математика, основы ML);
🔹 новый оффер и рост дохода.
Полученные знания применяешь в работе уже во время обучения.
⏳ Акция действует 48 часов — 13 и 14 июня.
👉 Переходи на сайт, выбирай курсы и оставляй заявку — за 10 минут поможем собрать комплект под твою цель.
🔥 Строишь ИИ-агентов? Руководитель AI/ML-направления Сloud․ru покажет, где большинство архитектур ломаются, и как этого избежать.
18 июня в 19:00 совместно с Сloud․ru проведём открытый урок «Мультиагентные системы: почему большинство архитектур переусложнены».
Спикер — Дмитрий Юдин, эксперт по масштабированию и оптимизации вычислительных ресурсов для ML. Под его руководством развивается Evolution AI Factory — цифровая среда для работы с GenAI. Он занимается развитием сервисов генеративного ИИ, инфраструктуры для обучения больших языковых моделей и внедрением интеллектуальных агентов.
Что получишь на уроке:
— критерии выбора между одним агентом и мультиагентной системой;
— разбор популярных архитектурных ошибок;
— реальные ограничения современных ИИ-агентов;
— практические рекомендации по проектированию агентных систем.
🎁 Для участников урока подготовили промокод на скидку 10 000 ₽.
🗓️ Когда: 18 июня, 19:00 (МСК)
👉 Занять место на открытом уроке
🗺️ Так работает алгоритм Дейкстры
Алгоритм Дейкстры — один из самых известных алгоритмов поиска кратчайшего пути в графе.
Именно на подобных идеях строятся навигаторы, системы маршрутизации и многие сетевые протоколы.
📍 Навигация: Вакансии • Задачи • Собесы
📍 Канал в Max
Библиотека питониста
#буст
🔥 Инженерная методичка по ИИ от Романа Барлоса (Team Lead в Yandex Cloud)
Продолжаем делиться экспертизой команды курса «Разработка ИИ-агентов».
Роман собрал мастхев-инструменты и ключевые работы для тех, кто хочет выйти за рамки вайбкодинга.
🛠️ Полезные инструменты:
• Understand Anything — граф знаний по коду и зависимостям.
• DeepTutor — open-source платформа для персонализированного обучения.
• Superpowers — набор практик для системной разработки с ИИ.
• Awesome Agent Skills — коллекция навыков для ИИ-агентов.
• Attention Is All You Need (2017) — архитектура Transformer.
• GPT-1 (2018) — начало эпохи GPT.
• GPT-2 (2019) — решение новых задач без дообучения.
• GPT-3 (2020) — обучение на примерах из запроса.
• InstructGPT (2022) — RLHF и современные чат-боты.
🐍 Python For Loops Explained: от основ до практических примеров
Циклы — одна из первых и самых важных тем в Python.
Отличный материал для новичков и тех, кто хочет быстро освежить знания по одной из самых базовых и полезных конструкций Python.
📍 Навигация: Вакансии • Задачи • Собесы
📍 Канал в Max
Библиотека питониста
#буст
⚡️ Продолжаем знакомить вас с экспертами курса AgentOps!
— Сергей Нотевский расскажет, как выстроить FinOps для AI-продуктов: оптимизировать затраты на разработку и продакшен, внедрить model routing, semantic cache и систему алертов для контроля расходов
— Эмиль Сатаев разберет Context Engineering: управление контекстом, защиту от prompt injection, работу с длинными контекстами и построение безопасного пайплайна входа для AI-систем
— Михаил Бондаревский покажет, как подготовить инфраструктуру для AI-агентов: Docker, sandboxing, streaming, docker-compose и воспроизводимое окружение для разработки и продакшена
— Мурат Хажгериев расскажет про Enterprise Integrations & MCP: когда MCP действительно нужен, как подключать внешние сервисы и реализовывать интеграции с OAuth2 delegation
— Герман Сабиров разберет Governance & Compliance для AI-систем: data flow, audit logs, требования 152-ФЗ, локализацию данных и построение compliance-подхода на уровне архитектуры
Курс для backend-разработчиков, тимлидов и LLM инженеров о том, как внедрять AI-логику в бэкенд IT-продуктов и сохранять стабильность сервиса.
👉 Изучить обновленную программу AgentOps и занять место.
🔥 Python Roadmap
Это подробное руководство и дорожная карта, которая помогает освоить Python, охватывая ключевые концепции, инструменты и технологии для обучения профессии разработчика.
😸 Ссылка
🔹 Курс «Программирование на языке Python»
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
🏃♀️ Азбука айтишника
#карьерныйкоммит
Python профилировка — где теряется время в коде
Код работает медленно, но непонятно где. Вместо того чтобы гадать — есть инструменты.
Шпаргалка по всем основным.
Быстрый замер — time
import time
start = time.perf_counter()
my_function()
print(f"{time.perf_counter() - start:.4f}s")
Для грубой оценки. perf_counter() точнее чем time()
import timeit
timeit.timeit("[x**2 for x in range(1000)]", number=10000)
# В Jupyter:
%timeit my_function()
import cProfile
cProfile.run("my_function()")
# Сохранить для анализа:
cProfile.run("my_function()", "output.prof")
# В Jupyter:
%prun my_function()
Смотреть на tottime (время только в функции) и cumtime (с учётом вызовов внутри)
# pip install line_profiler
@profile
def my_function():
...
kernprof -l -v script.py
# В Jupyter:
%load_ext line_profiler
%lprun -f my_function my_function()
# pip install memory_profiler
@profile
def my_function():
...
python -m memory_profiler script.py
# В Jupyter:
%load_ext memory_profiler
%memit my_function()
# pip install snakeviz
snakeviz output.prof
# Откроет браузер с интерактивной диаграммой
📚Напоминаем про наш полный курс «Самоучитель по 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
🦾🧠🏋️ Качаем мозги к лету!
Все готовятся к пляжному сезону, а мы предлагаем прокачать хард-скилы, чтобы забрать крутой оффер, строить продукты будущего и работать из любой точки мира 😎
⚡️ Распродажа @proglib_academy: забирайте самые актуальные образовательные треки по сниженным ценам!
➡️ Разработка AI-агентов — от 49 000 ₽ (вместо 69 000 ₽).
➡️ Курс AgentOps — 129 000 ₽ (вместо 149 000 ₽).
➡️ Математика для разработки AI-моделей — 23 990 ₽ (вместо 31 990 ₽).
➡️ ML для старта в Data Science — 28 990 ₽ (вместо 38 990 ₽).
Почему мы?
⭐️Учим для продакшена. Наши программы заточены под реальные задачи бизнеса: как не слить бюджет на токены, как заставить LLM работать стабильно в бэкенде и как выстроить отказоустойчивую архитектуру.
⭐️Спикеры — суровые практики. Вы будете перенимать опыт у действующих AI-архитекторов, тимлидов и ML-инженеров из топовых IT-компаний.
⭐️Комплексный подход. Мы даем как мощный математический фундамент для понимания моделей «под капотом», так и передовые инструменты оркестрации агентов.
⭐️Много практики и фидбека. Вебинары, десятки практических заданий и живое общение с экспертами в чате Telegram на протяжении всего обучения.
⏳ Оставляйте заявку и бронируйте место со СКИДКОЙ 40%
🧪 Перестаньте вручную писать десятки edge-case тестов
Обычный подход к тестированию выглядит так:
придумать странный input → написать тест → проверить поведение
def test_round_trip_specific():
assert decode(encode("hello world")) == "hello world"
from hypothesis import given
from hypothesis import strategies as st
@given(st.text())
def test_round_trip_any_string(s):
assert decode(encode(s)) == s
Falsifying example:
url=''
@given(st.text())
def test_encode_decode(s):
assert decode(encode(s)) == s
@given(st.text())
def test_normalize_idempotent(url):
assert normalize(url) == normalize(normalize(url))
@given(st.text())
def test_parser_does_not_crash(s):
try:
parse(s)
except ValueError:
pass
🤖 Используешь AI для написания кода? В Яндексе покажут, как применять AI для реальных задач разработки.
23 июня в 19:00 совместно с Яндексом проведём открытый урок «AI-инструменты в разработке: как писать код быстрее с помощью ассистентов».
Спикер — Ольга Лукьянова, руководитель команды поиска и навигации по коду в SourceCraft. Более 18 лет развивала инструменты для разработчиков в JetBrains и руководила разработкой IDE в Huawei.
Что получишь на уроке:
— поймёшь, как использовать AI-ассистентов и облачных агентов в работе;
— научишься быстрее разбираться в новых проектах и кодовой базе;
— узнаешь, какие задачи стоит отдавать AI и как получать качественный результат;
— увидишь полный workflow работы с AI: от постановки задачи до код-ревью.
На уроке — живой разбор реального проекта с кодом. Ольга покажет промпты из рабочих сценариев и ответит на ваши вопросы в Q&A.
⚠️ Количество мест ограничено
🗓️ Когда: 23 июня, 19:00 (МСК)
👉 Занять место на открытом уроке
⏰ Уже сегодня в 19:00 (МСК) стартует открытый урок!
Тема:
«Мультиагентные системы: почему большинство архитектур переусложнены»
это всего лишь библиотеки 😁никаких тебе несовместимостей или ошибок импорта
Библиотека питониста
#развлекалово
📚Напоминаем про наш полный курс «Самоучитель по 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
➡️ Symbolica 2.0: символьные вычисления для Python и Rust
Если вы работаете с математическими выражениями и хотите не терять скорость, посмотрите на Symbolica.
Это высокопроизводительный фреймворк для символьных вычислений. Идея простая: пишете выражение символически, Symbolica превращает его в быстрый численный код.
Из конкретного:
🔺 система регистрации символов с неймспейсами, алиасами и тегами
🔺 новый интерфейс evaluator с JIT-компиляцией и double-float арифметикой
🔺 новые встроенные функции: гамма, полилогарифмы, функции Бесселя, дзета Римана
🔺 красивый вывод в Jupyter и Marimo: HTML, LaTeX, Typst, цветные скобки
Как выглядит в Python
from symbolica import Expression
x, y = Expression.symbols("x", "y")
e = (1 + x) ** 2 + y
# разворачиваем
print(e.expand()) # -> 1 + 2*x + x^2 + y
# берём производную
print(e.derivative(x)) # -> 2 + 2*x
pip install symbolica
👀 5 тайп-чекеров в Python — нужно ли запускать все?
mypy, Pyrefly, Pyright, ty, Zuban — и это ещё не конец списка. Как поддерживать библиотеку когда каждый чекер хочет свои аннотации.
Короткий ответ: не нужно гонять все пять по исходникам. Нужно гонять их по тестам.
Когда вы запускаете тайп-чекер на внутреннем коде — вы проверяете свою логику. Каким чекером пользоваться внутри — ваш выбор.
Но каким чекером пользуются ваши пользователи — не ваш выбор. Они придут с mypy, кто-то с Pyright, кто-то уже перешёл на ty. И все они будут взаимодействовать с вашим публичным API.
Запускайте как можно больше чекеров на тестах → убедитесь что публичный API работает для всех.
Пример из Polars
Вот во что превращается код когда пытаешься угодить всем чекерам сразу в исходниках:
@overload # type: ignore[override]
def __eq__( # pyrefly: ignore[bad-override]
self, other: pl.DataTypeExpr
) -> pl.Expr: ...
@overload
def __eq__(self, other: PolarsDataType) -> bool: ...
def __eq__( # ty: ignore[invalid-method-override]
# pyright: ignore[reportIncompatibleMethodOverride]
self, other: pl.DataTypeExpr | PolarsDataType
) -> pl.Expr | bool:
def test_dtype_time_units() -> None:
for time_unit in DTYPE_TEMPORAL_UNITS:
assert pl.Datetime == pl.Datetime(time_unit)
assert pl.Duration == pl.Duration(time_unit)
🐍 Будущее JIT в CPython оказалось под вопросом
Steering Council Python официально потребовал подготовить Standards Track PEP, который должен обосновать включение JIT-компилятора в состав CPython как полноценной и поддерживаемой функции, а не экспериментального проекта.
🔛 JIT разрабатывается уже несколько лет и недавно показал заметный прирост производительности. Однако совет считает, что проект такого масштаба требует формального обсуждения и четких обязательств по поддержке.
До принятия PEP разработчиков попросили приостановить добавление новых возможностей, оптимизаций и улучшений производительности JIT. Разрешены только исправления ошибок и уязвимостей.
В документе должны быть рассмотрены:
✔️ долгосрочная поддержка и сопровождение JIT;
✔️ совместимость с существующими возможностями CPython (free-threading, профилировщики, отладчики и др.);
✔️ измеримые цели по производительности и срокам реализации;
✔️ взаимодействие с другими JIT-решениями, включая CinderX, Numba и PyTorch;
✔️ стабильность текущей архитектуры и планы её развития.
На подготовку и принятие PEP отведено 6 месяцев. Если за это время предложение не будет одобрено, код JIT будет удалён из основной ветки CPython, а дальнейшая разработка продолжится вне официального репозитория Python.
Фактически речь идёт не об отмене JIT, а о том, чтобы определить его статус, гарантии и будущее внутри экосистемы Python.
📍 Навигация: Вакансии • Задачи • Собесы
📍 Канал в Max
Библиотека питониста
#буст
😎 Знакомьтесь с экспертом Proglib.academy: Senior Software Engineer и Team Lead в Yandex Cloud Роман Барлос
Роман — консультант нашего курса «Разработка ИИ-агентов». Он работает на стыке cloud-native архитектуры и AI, активно внедряя современные ИИ-подходы в реальные процессы разработки.
За что его ценит IT-комьюнити?
🟣 Team Lead и AI-евангелист в команде UX Yandex Cloud
14-лет в разработке. Занимается AI-адопшеном в команде Yandex Cloud, проводит мастер-классы и продвигает лучшие практики для повышения эффективности разработчиков.
С сильным практическим бэкграундом принимал участие как технический лид в создании мощного AI-расширения для VS Code.
Разрабатывает утилиты, которые позволяют быстро начать эксперименты с инференсом и агентами в локальном окружении: например, набор скриптов vllm-setup для быстрого запуска окружения и mini-proxy — минималистичный прокси для OpenAI API провайдеров.
Объясняет сложные концепции наглядно. Создал серию залипательных обучающих материалов, где можно вживую пощупать работу сетей Хопфилда, машин Больцмана и VC-размерности.
🛠 Прокачиваем Claude Code и Codex: топовые скилы, которые сделают из твоего ИИ сеньора
Пока все просто закидывают нейронки базовыми промптами, продвинутые инженеры уже вовсю собирают и используют кастомные «скилы» (модули расширения). Они превращают generic-модели в специализированных бойцов.
Забирайте подборку ультимативных скилов для AI-агентов, которые закроют большинство ваших повседневных болей:
cybrix-skills — скил для Claude Code, который позволяет одной командой задеплоить статический сайт на хостинг
book-to-skill — скил для Claude Code, превращающий PDF и EPUB в структурированные скилы. На выходе директория ~/.claude/skills/<имя-книги>/ с файлами по главам, глоссарием, списком паттернов и шпаргалкой
skills — набор скилов для AI-агентов, решающих типичные проблемы разработки: непонимание задачи, многословность агента, нерабочий код и архитектурный хаос
hatch-pet — скил Codex для создания виртуального питомца
Taste-skill — это коллекция скилов, которая помогает создавать премиальные фронтенды с продуманной типографикой, анимацией и композицией
Graphify — скил, который одной командой /graphify строит граф знаний всего проекта (код, документы, PDF, изображения, видео) и позволяет задавать вопросы по архитектуре проекта
🔹 Курс о том, как внедрять AI-логику в бэкенд и сохранять стабильность сервиса
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
🏃♀️ Proglib Academy
#буст
🆕 Вышел PyPy 7.3.23: обновление для Python 2.7 и Python 3.11
Команда PyPy выпустила версию 7.3.23 — небольшой, но полезный релиз с исправлениями ошибок и улучшениями совместимости.
Что изменилось:
🔹 Исправлено слишком агрессивное предупреждение о неиспользуемых coroutine.
🔹 Устранены проблемы с множественным наследованием в C-расширениях.
🔹 Обновлён байткод-интерпретатор: теперь используются exception tables вместо специальных opcode-инструкций. Благодаря этому вывод dis стал гораздо ближе к формату CPython. На производительность изменение пока не влияет.
Релиз включает два интерпретатора:
• PyPy2.7 — совместим с Python 2.7 и стандартной библиотекой CPython 2.7.18+
• PyPy3.11 — совместим с Python 3.11 и стандартной библиотекой CPython 3.11.15
Для справки:
PyPy — это альтернативная реализация Python, которая выступает как drop-in replacement для CPython.
Главное преимущество — встроенный JIT-компилятор, который во многих сценариях позволяет выполнять Python-код заметно быстрее без изменений в самом приложении.
➡️ Два бага из-за области видимости в Python — и как их избежать
Приложение работает нормально. Открываешь вторую вкладку — данные не те. Тесты проходят по отдельности, но падают вместе. Причина — объект на уровне модуля.
Проблема 1: слишком много sharing
Типичный паттерн в FastAPI-проектах:
# database.py
engine = create_engine("sqlite:///database.db")
engine создаётся в момент импорта. Все модули, которые импортируют из database.py, используют один и тот же engine, один пул соединений, один файл БД.setup/teardown, но состояние всё равно утекает: автоинкремент ID, кэш метаданных, внутреннее состояние SQLite. Тест assert id == 1 проходит первым, но падает если запустить после другого теста.
@pytest.fixture
def engine():
engine = create_engine("sqlite://", echo=False)
SQLModel.metadata.create_all(engine)
yield engine
engine.dispose()
def get_data_source() -> DataSource:
return FakeDataSource(...) # новый объект каждый раз
FakeDataSource со своим состоянием с нуля. Вкладка А показывает одно, вкладка Б — другое. Никакой общей реальности нет.app.state:
@asynccontextmanager
async def lifespan(app: FastAPI):
app.state.data_source = get_data_source()
yield
def get_data_source(request: Request) -> DataSource:
return request.app.state.data_source
dependency_overrides.
⚡️ Последний шанс забрать курсы со СКИДКОЙ 40%! Прокачайте свой мозг правильно
До конца акции вы можете воспользоваться специальными ценами на самые востребованные IT-направления. Круто и выгодно прокачать свои скиллы, чтобы получить оффер, уехать на Бали и больше не быть онлайн 😎
➡️ Разработка AI-агентов — от 49 000 ₽ (вместо 69 000 ₽)
Курс про контролируемую разработку ИИ-агентов: качество, стоимость, наблюдаемость и тестирование. С первого занятия — только практическая работа.
➡️ Курс AgentOps — 129 000 ₽ (вместо 149 000 ₽)
Профессиональный трек для разработчиков и LLM инженеров о том, как правильно внедрять AI-логику в бэкенд и сохранять железную стабильность сервиса.
➡️ Математика для Data Science — от 29 990 ₽ (вместо 39 990 ₽)
Вы научитесь решать сложные математические задачи, которые дают на собеседованиях на позицию дата-сайентиста в бигтехе. Отличная база для мощного старта в DS.
➡️ Курс Специалист по ИИ — 89 000 ₽ (вместо 113 900 ₽)
Комплексная программа для получения профессии в сфере ИИ с нуля. За 8 месяцев вы соберете сильное портфолио из 5 реальных проектов и дипломной работы.
➡️ Архитектуры и шаблоны проектирования — 27 990 ₽ (вместо 37 900 ₽)
Интенсив для разработчиков, который поможет освоить основные паттерны проектирования и прокачать навыки архитектора программного обеспечения.
🌸 Выбирайте направление, оставляйте заявку на сайте распродажи, и наш менеджер подробно вас проконсультирует
😱 Как правильно валидировать BST на Python (и не завалить интервью)
Задача Validate Binary Search Tree — одна из тех, что регулярно всплывают на coding interviews. И большинство кандидатов сначала решают её неправильно.
Типичная ошибка — проверять только родителя:
if node.left and node.left.val >= node.val:
return False
10
/ \
5 15
/ \
6 20
def is_valid_bst(root):
def validate(node, min_val, max_val):
if not node:
return True
if node.val <= min_val or node.val >= max_val:
return False
return (
validate(node.left, min_val, node.val)
and validate(node.right, node.val, max_val)
)
return validate(root, float("-inf"), float("inf"))
🙂 Что такое Flask?
В мире Python-разработки все делятся на два лагеря: те, кто берет тяжелую Django, и те, кто выбирает Flask.
Flask - это микрофреймворк. «Микро» значит в нем нет ничего лишнего из коробки.
Вот как это работает:
• Свобода
Django дает тебе сразу всё: админку, базу, авторизацию. Flask дает только базу (роутинг и шаблоны). Итог: ты сам выбираешь, какую базу данных подключить и как строить архитектуру.
• Легкий старт
Простейшее приложение на Flask пишется в 5 строк кода. Итог: это идеальный выбор для маленьких сервисов, API или микросервисов. Не нужно разворачивать огромную структуру ради одной функции.
• Гибкость через расширения
Нужна админка? Ставишь Flask-Admin. Нужна база? Flask-SQLAlchemy. Итог: твой проект весит ровно столько, сколько ему нужно, без лишнего «жира» в коде.
• Масштабируемость
Кажется, что Flask только для маленьких сайтов. Но на нем работают части систем в Netflix, Reddit и Airbnb. Итог: при прямых руках на нем можно поднять проект любой сложности.
Проблема в том, что свобода Flask ловушка для новичков. Без понимания архитектуры твой проект быстро превратится в спагетти.
На чем планируете писать свой первый (или следующий) бэкенд?
❤️ — Flask, люблю минимализм
🔥 — Django, пусть всё будет из коробки
🔹 Курс «Программирование на языке Python»
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
🏃♀️ Азбука айтишника
#ликбез
👇 Альтернативы `break` в Python, которые делают код чищеbreak — полезная штука, когда нужно досрочно выйти из цикла. Но во многих случаях код можно сделать более читаемым и “питоничным”, используя встроенные инструменты Python.
Вот несколько частых сценариев.
1. Проверить, есть ли значение в коллекции
Вместо цикла с break:
is_purple = False
for color in colors:
if color == "purple":
is_purple = True
break
in:
is_purple = "purple" in colors
has_big_score = False
for score in scores:
if score > 100:
has_big_score = True
break
has_big_score = any(
score > 100
for score in scores
)
all().
first_long_word = None
for word in words:
if len(word) > 4:
first_long_word = word
break
first_long_word = next(
(word for word in words if len(word) > 4),
None
)
next() + generator expression позволяют сразу взять первое совпадение.
result = []
for item in items:
if not item:
break
result.append(item)
from itertools import takewhile
result = list(takewhile(bool, items))
takewhile() собирает элементы, пока условие возвращает True.inany()all()next()itertools.takewhile()