39269
Все самое полезное для питониста в одном канале. Список наших каналов: https://t.me/proglibrary/9197 Курс по ML: https://cl Для обратной связи: @proglibrary_feeedback_bot По рекламе: @proglib_adv РКН: https://gosuslugi.ru/snet/67b885cbd501cf3b2cdb5b36
awesomePrep: полноценный тренажер к интервью по Python (424 вопроса)
awesomePrep — это бесплатный open-source проект, который превращает подготовку к техническому собесу в структурированный процесс.
🔗 Ссылка на платформу
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека питониста
#буст
➡️ Чит-лист по Claude Code (Workflow 2026)
Claude Code — это не просто CLI, а полноценная среда для автономного кодинга. Чтобы он не «галлюцинировал», нужно правильно выстроить иерархию памяти:
CLAUDE.md — файл в корне проекта, который содержит техстек, архитектуру и правила (Style Guide). Claude читает его первым.
Skills (Навыки) — создавайте .md файлы в папке .claude/skills/. Описывайте там паттерны тестирования или правила деплоя — Claude вызовет их автоматически через NLP.
Иерархия памяти: используйте глобальный CLAUDE.md для общих правил и локальные файлы в подпапках для специфического контекста (например, только для фронтенда).
Команды-выручалочки:
/init — просканировать проект и создать базу знаний.
/compact — сжать контекст, когда беседа стала слишком длинной (экономит токены!).
Esc Esc — быстрый возврат в меню.
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека питониста
#буст
Кажется, мы окончательно перешли от игрушек к суровому AgentOps
Приглашаем на наш обновлённый курс по разработке ИИ-агентов. Никакой воды про «будущее нейросетей», только инженерный подход.
Что внутри:
— пошагово строим готовые системы на LangGraph, CrewAI и MCP;
— настраиваем кэширование и роутинг, чтобы бот не сожрал токены;
— разбираемся со стейтом, учимся дебажить через time-travel и прикручиваем human-in-the-loop;
— выводим RAG в прод так, чтобы безопасники не завернули архитектуру из-за 152-ФЗ.
В пекло скучные лекции про общую инфраструктуру — сразу фокусируемся на агентных фреймворках и написании кода. Занятия ведут бывалые лиды из Газпромбанка и Альфы, набившие шишки на реальных задачах.
Кстати, на днях мы пилили агента в прямом эфире, если пропустили — есть запись вебинара.
🔥 Гид по Python-экосистеме: что стоит внедрить в 2026 году
Python уже давно перерос роль «языка для скриптов». Сегодня это фундамент для автономных агентов и высоконагруженных систем. В этом обзоре — библиотеки, которые меняют правила игры в разработке, аналитике и безопасности.
📌 Чтобы не потерять вакансии и анонсы — добавь папку
➡️ Общего назначения
✳️ ty — сверхбыстрый type checker нового поколения
✳️ complexipy — измеряет сложность кода так, как её чувствует человек
✳️ Kreuzberg — извлечение данных из 50+ форматов
✳️ hrottled-py — rate limiting с 5 алгоритмами
✳️ httptap — HTTP waterfall прямо в терминале
✳️ fastapi-guard — безопасность FastAPI без боли
✳️ modshim — расширяй модули без monkey-patching
✳️ Spec Kit — спецификации → рабочий код
✳️ Skylos — dead code + уязвимости
✳️ FastOpenAPI — OpenAPI для любого фреймворка
➡️ AI / ML / Data
✳️ MCP Python SDK + FastMCP — стандарт интеграции LLM с инструментами
✳️ TOON — JSON, оптимизированный под токены
✳️ Deep Agents — агенты с планированием и памятью
✳️ smolagents — агенты, которые думают кодом
✳️ LlamaIndex Workflows — event-driven AI workflows
✳️ Batchata — дешёвые batch-запросы к LLM
✳️ MarkItDown — любые файлы → Markdown
✳️ Data Formulator — анализ данных через natural language
✳️ LangExtract — точное извлечение сущностей из текста
✳️ GeoAI — ML + геоданные без боли
👉 Детально, с примерами и разбором — в полной статье
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека питониста
#буст
🛠 PEP 810: эволюция импортов в Python
История внедрения lazy import — это не просто рассказ о новой фиче, а настоящий мастер-класс по тому, как сообщество Python умеет работать над ошибками и находить баланс между производительностью и стабильностью.
📉 Почему PEP 690 (первая попытка) провалился
В 2022 году Meta предложила радикальный подход: флаг -L, делающий все импорты ленивыми по умолчанию. Управляющий совет (Steering Council) наложил вето по веским причинам:
— Фрагментация: Это создало бы «два разных Python», где библиотеки вели бы себя по-разному.
— Скрытые сайд-эффекты: Огромное количество legacy-кода завязано на логике, которая выполняется строго в момент импорта.
— Сложность отладки: Ошибки инициализации могли «всплывать» в самых неожиданных местах рантайма.
🚀 Почему PEP 810 (текущий) — это победа
Дизайн был полностью переосмыслен. Вместо неявного глобального флага мы получили явный синтаксический сахар:
1. Явность (Opt-in): Вводится новое «мягкое» ключевое слово lazy. Вы сами помечаете тяжелые зависимости, которые не нужны при старте.
# Python 3.15+
lazy import torch
lazy from matplotlib import pyplot as plt
dict. PEP 810 изящнее — он создает легкий прокси-объект. Реальный импорт триггерится только в момент первого обращения к атрибуту объекта.lazy import есть свои «но»:lazy from module import * вызовет SyntaxError, так как интерпретатору нужно знать список имен заранее.ModuleNotFoundError теперь вылетит не в начале скрипта, а в строке, где вы впервые вызвали torch.save(). Это нужно учитывать при написании долгоживущих сервисов.
🚀 Polars 1.39: новая версия
Библиотека Polars продолжает сокращать разрыв между локальной обработкой данных и полноценными хранилищами данных (Data Lakehouses).
Версия 1.39 принесла три ключевых фичи, которые сильно упростят жизнь дата-инженерам.
📈 1. Streaming AsOf Join
Функция join_asof() теперь поддерживается стриминговым движком.
Теперь можно объединять огромные временные ряды (time-series), которые не помещаются в оперативную память.
Идеально для финансового анализа и данных с датчиков (IoT), где нужно сопоставить события по ближайшей метке времени.
🧊 2. Полноценный цикл с Apache Iceberg
В дополнение к чтению (`scan_iceberg`), появился sink_iceberg() для записи данных из LazyFrame.
Polars теперь поддерживает полный цикл чтения/записи для архитектур Data Lakehouse на базе Iceberg.
Можно обрабатывать данные и сохранять их напрямую в аналитические таблицы без промежуточных CSV/Parquet файлов.
☁️ 3. Стриминг прямо из облака
Функции scan_csv(), scan_ndjson() и scan_lines() теперь умеют скачивать данные потоково.
Polars больше не нужно скачивать файл целиком из S3 или Azure Blob перед началом обработки.
Значительная экономия места на диске и ускорение «холодного» старта ваших скриптов.
🔗 Ссылка на релиз
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека питониста
#буст
🐍 Python совет: if при подсчете элементов
Один из самых частых паттернов у новичков — использование условий для проверки наличия ключа в словаре при подсчете. Это работает, но выглядит громоздко и совсем не «по-питонячьи».
❌ Как делать не стоит (многословно):
counts = {}
for item in items:
if item in counts:
counts[item] += 1
else:
counts[item] = 1
from collections import defaultdict
counts = defaultdict(int) # указываем тип int как дефолтный (даст 0)
for item in items:
counts[item] += 1
defaultdict(int), вы говорите Python: «Если ключа нет, создай его и присвой значение, которое возвращает функция int(), то есть **0**».if item in counts.Counter:
from collections import Counter
counts = Counter(items)
print(counts.most_common(3)) # Бонус: сразу получаем топ-3 элемента
⏳ Часовая готовность: создаём ИИ-агента в прямом эфире
В 19:00 МСК в рамках нашего курса «Разработка AI-агентов» стартует вебинар «ИИ-агенты в продакшене: от хайпа к деньгам». Спикер — Полина Полунина, руководитель AI-направления в Альфа-Банке.
Будет live-демо работающего агента, реальные метрики из корпоративной среды и честный разбор архитектурных граблей — без воды и «успешного успеха».
Всем зрителям эфира дадим эксклюзивный промокод AGENTS на скидку 10 000 ₽ на любой тариф курса.
👉 Занять место на вебинаре
🚀 Лестница оптимизации Python
Все знают, что Python медленный. Но мало кто знает, на какой «ступеньке» пора остановиться, чтобы не тратить недели на оптимизацию того, что и так работает.
Разработчик провел масштабный бенчмарк (март 2026) на Apple M4 Pro и составил «лестницу» инструментов.
Оказалось, что дело не только в GIL. Главный виновник — максимальная динамичность. На каждый a + b Python должен спросить: «Что такое a? Что такое b? Есть ли у них метод add? Не подменили ли его секунду назад?». В итоге обычное число в C занимает 4 байта, а в Python — 28 байт «обвязки».
🪜 Ступени лестницы (от простого к сложному):
1. Обновите CPython (Уровень: Легко)
• Профит: до 1.4x (переход с 3.10 на 3.11+).
• Цена: Смена версии в Dockerfile.
• Нюанс: 3.14t (без GIL) в однопотоке чуть медленнее из-за накладных расходов на атомарные операции.
2. Альтернативные рантаймы (PyPy, GraalPy)
• Профит: 6x – 66x.
• Цена: Просто запустить код другим интерпретатором.
• Нюанс: Совместимость с C-библиотеками (pandas, numpy) может быть кривой.
3. Mypyc (Компиляция типов)
• Профит: 2.4x – 14x.
• Цена: Написать нормальные Type Annotations.
• Нюанс: Отлично работает, если ваш код и так проходит строгую проверку mypy.
4. Numba (@njit)
• Профит: 50x – 135x.
• Цена: Один декоратор и перевод данных в массивы NumPy.
• Нюанс: Идеально для тяжелых математических циклов.
5. Cython (Путь джедая)
• Профит: до 124x (уровень нативного C).
• Цена: Знание C и борьба с «минным полем» (например, x ** 0.5 в Cython может быть в 40 раз медленнее, чем `sqrt(x)`).
6. Новая волна (Mojo, Codon, Taichi)
• Профит: до 198x.
• Цена: Сырые инструменты, отсутствие колес (wheels) под новые версии Python. Mojo — это вообще новый язык "в шкуре" Python.
7. Rust (PyO3)
• Профит: 113x – 154x.
• Цена: Изучение Rust.
• Главный плюс: Не чистая скорость, а «владение данными». Rust может распарсить JSON в свои структуры, вообще не создавая медленные Python-словари.
Стеклянный потолок: Словари и JSON
Если ваша задача — гонять JSON (как в реальном мире), то Cython и Rust дадут лишь 4x-6x профита, пока вы используете стандартный json.loads().
Золотое правило: Потолок скорости в вебе — это создание Python-объектов. Если хотите реального рывка, нужно уходить от dict и парсить данные сразу в C-структуры или Rust-типы.
😄 Подборка Python-мемов
🤓 Листайте, улыбайтесь и узнавайте себя.
Если у вас есть свои любимые — делитесь в комментариях
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека питониста
#буст
🐍 Разминаем мозги: тест на знание основ Python
🐸 Библиотека питониста
🐼 Pandas: 4 фатальные ошибки, которые делают 51% разработчиков
Даже в 2026 году Pandas остается главной «головной болью» Python-разработчика. С выходом версий 2.x и 3.x правила игры изменились.
1. Итерация по строкам
❌ iterrows() — забудьте о нем. Он конвертирует каждую строку в pd.Series, создавая дикий overhead.
✅ itertuples() — если цикл неизбежен, он быстрее в 10–100 раз.
✅ Векторизация (np.where) — в 4000 раз быстрее.
> DS-совет: Если логика сложнее обычного сложения — используйте .apply(), но стремитесь к векторизации через NumPy.
2. Переименование
✅ .rename(columns=...) — самый безопасный путь. Не ломается при изменении схемы.
✅ .str.lower().str.replace() — лучший способ массово привести колонки к snake_case.
✅ add_prefix() — спасение при сложных merge, когда нужно быстро разделить признаки из разных таблиц.
3. Война с NaN
NaN — это не просто пустая ячейка, это сигнал о проблеме в данных.
✅ Диагностика: df.isna().sum() — база.
✅ ffill() / bfill() — критически важны для временных рядов (Time Series), чтобы не терять динамику.
✅ fillna(median) — классика для ML-пайплайнов, но всегда проверяйте природу пропусков. Иногда dropna(subset=[...]) — единственный честный путь.
4. Фильтрация
✅ Булевы маски: df[(df['A'] > 0) & (df['B'] < 1)] — классика. Важно: забудьте скобки — получите ошибку приоритета.
✅ `.query()` — читается как SQL, поддерживает переменные через @. Идеально для длинных условий.
✅ .loc[] — единственный верный способ, если нужно одновременно отфильтровать строки и выбрать колонки.
🔗 Ссылка на пост
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека питониста
#буст
🚪 Knock-Knock: кто стучится в мой SSH
Проект Knock-Knock — это стильный и информативный дашборд-медоед (honeypot), который в реальном времени визуализирует атаки на ваш SSH-порт. Вместо скучных логов вы получаете живую ленту «стуков» со всеми подробностями.
Что можно увидеть на дашборде:
— Live Feed: поток попыток входа с указанием логина, пароля, IP и провайдера атакующего.
— 3D-Глобус: визуализация локации последнего «стука» и тепловая карта стран-агрессоров.
— Стена позора (Leaderboards): топы самых популярных паролей, логинов и наглых ISP.
Архитектура проекта проста и эффективна:
1. Honeypot (Python): слушает порт 22 и перехватывает данные.
2. Monitor: обогащает IP данными GeoIP (город, страна, провайдер).
3. Backend (FastAPI + Redis): хранит статистику в SQLite и транслирует живые события через WebSockets.
4. Frontend: адаптивный дашборд, который отлично работает и на десктопе, и на мобилках.
🔗 Демо в реальном времени: https://clc.to/P8C1mw
📂 GitHub проекта: https://clc.to/cjZX7Q
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека питониста
#буст
⚡️ Google представил CEL-expr-python: мощный язык правил теперь нативно в Python
Google официально открыл исходный код CEL-expr-python — реализации Common Expression Language (CEL) для Python.
Если вы строите системы, где нужно безопасно вычислять условия «на лету» (например, правила доступа или валидацию данных), этот инструмент станет вашим фаворитом.
CEL (Common Expression Language) — это не-Тьюринг-полный язык выражений. Он специально создан простым, быстрым и, главное, безопасным. В отличие от обычного eval(), CEL гарантирует отсутствие побочных эффектов и всегда завершает выполнение.
from cel_expr_python import cel
# Создаем среду и объявляем переменные
env = cel.NewEnv(variables={"age": cel.Type.INT})
# Компилируем условие
expr = env.compile("age >= 18 ? 'Доступ разрешен' : 'Доступ запрещен'")
# Вычисляем
print(expr.eval(data={"age": 21})) # Доступ разрешен
🛡 Вышел Python 3.10.20 (Security Release)
Если ваши проекты всё ещё крутятся на ветке 3.10, пришло время обновиться.
Вчера, 3 марта 2026 года, вышел критический патч безопасности для серии 3.10.
Разработчики закрыли сразу несколько серьезных дыр, которые могли привести к инъекциям и отказам в обслуживании (DoS):
🔛 Исправлены ошибки в email.generator, которые позволяли подделывать заголовки писем.
🔛 Обновлена библиотека libexpat до версии 2.7.4. Это защита от вредоносных XML-файлов, которые могли переполнить память сервера.
🔛 Модули http.cookies и wsgiref теперь жестко блокируют управляющие символы, предотвращая манипуляции с заголовками.
🔛 Исправлены критические ошибки «use-after-free» в модуле ssl и при сравнении списков, которые могли привести к падению интерпретатора или выполнению произвольного кода.
Если вы до сих пор на 3.10 — это серьезный повод запланировать миграцию на Python 3.14 (текущий стабильный релиз). В новых версиях не только безопаснее, но и значительно быстрее.
🔗 Полный чейнджлог: https://clc.to/9505nQ
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека питониста
#буст
🛡 Срочное обновление безопасности: Python 3.12.13, 3.11.15 и 3.10.20
Если ваш проект работает на одной из этих версий Python, пришло время обновиться. Команда core-разработчиков выпустила экстренные патчи, закрывающие серьезные уязвимости.
Так как эти ветки находятся в режиме security-fix-only, обновления доступны только в виде исходного кода.
🔐 Что исправили? (Основные моменты)
1. Инъекции в Email и HTTP-заголовки
Исправлены критические ошибки в email.generator и http.cookies. Теперь система жестко блокирует попытки вставить управляющие символы или некорректно «склеить» заголовки. Это защищает от атак типа *Header Injection*.
2. Защита от DoS-атак (Отказ в обслуживании)
Разработчики устранили несколько «узких мест» с квадратичной сложностью вычислений (уязвимости типа *ReDoS* и переполнение памяти):
— В парсинге параметров HTTP и XML.
— В обработке путей через os.path.expandvars().
— В модулях plistlib, http.client и http.server.
3. Безопасность XML и HTML
Обновлена библиотека libexpat до версии 2.7.4. Это закрывает свежие CVE 2026-го года, связанные с переполнением памяти при обработке вредоносных XML-файлов. Также усилен html.parser для работы с агрессивной разметкой.
4. Память и SSL
Исправлена опасная ошибка *use-after-free* (использование памяти после освобождения) в модуле ssl, которая могла возникать при сбое инициализации соединения.
🔗 Ссылка на новость
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека питониста
#буст
🐸 Библиотека питониста
#развлекалово
У «Библиотеки программиста» появился резервный канал в мессенджере MAX
Он нужен исключительно для связи с теми, кто не может следить за обновлениями здесь из-за трудностей с доступом. Поэтому, если вы видите это сообщение, распространите его среди жильцов вашего ЖЭКа.
Контент в MAX будет дублировать телеграмный — основной нашей площадкой был и остаётся Telegram. Надеемся, это временная мера.
→ Подписаться на «Библиотеку программиста» в MAX
🛠 Работа с Claude Code: от базовых настроек до автоматизации
Claude Code — это CLI-агент от Anthropic, который работает напрямую в вашем терминале.
Чтобы превратить его из простого чат-бота в полноценного напарника, стоит внедрить несколько продвинутых техник из недавнего гайда «45 советов».
🔗 Ссылка на Github
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека питониста
#буст
Самый востребованный навык в ИТ в 2026-м — навык создания ИИ-агентов
Мы полностью переработали курс «Разработка AI-агентов» под реалии 2026 года. Никакой долгой теории — пишем код с первого дня. Обучать и делиться набитыми шишками будут эксперты-практики из Газпромбанка, Альфа-Банка и других бигтехов.
В программе:
— архитектура автономных систем с тестированием, ReAct-циклами и контролем токенов;
— практическая работа с актуальными фреймворками LangGraph, AutoGen, MCP и CrewAI;
— настройка продвинутого RAG для парсинга документов и точного поиска;
— внедрение решений с учётом действующего законодательства (152-ФЗ);
— дипломная работа, за основу которой можно взять свой рабочий проект или задачу, которую предложим мы.
Эксперты поделятся инсайтами из реального продакшна — тем, о чём вам никогда не расскажет ни одна нейросеть.
Запись первого открытого вебинара, на котором мы вместе с руководителем AI-направления в Альфа-Банке Полиной Полуниной пилили агента в прямом эфире.
🚀 Мастер-класс по Python: от «Hello World» до профи
Если вы ищете структурированный и интерактивный способ выучить Python в 2026 году, этот курс — отличная точка входа. Здесь нет «воды», только живой код и практика.
Курс разбит на логические блоки (12 модулей, 71 урок), которые ведут вас от основ к профессиональной разработке.
🔗 Ссылка на курс
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека питониста
#буст
The Algorithm Design Manual считается «Библией» для подготовки к собеседованиям в BigTech и незаменимым справочником для тех, кому нужно решать реальные задачи, а не просто доказывать теоремы.
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека питониста
#буст
☝️ Уже сегодня: ИИ-агенты в продакшене — инженерный подход к интеграции LLM
Индустрия активно обсуждает потенциал нейросетей, способных автоматизировать бизнес-процессы и заменить целые отделы. Однако реальное внедрение агентов в production вскрывает серьёзные проблемы: разработчикам приходится бороться с непредсказуемыми галлюцинациями моделей, нестабильными API и сложной интеграцией в существующую архитектуру.
Сегодня в 19:00 МСК в рамках нашего курса «Разработка AI-агентов» мы проведём открытый вебинар «ИИ-агенты в продакшене: от хайпа к деньгам». Спикер — Полина Полунина, руководитель AI-направления в Альфа-Банке. Будем говорить о нейросетях с позиции жёсткой инженерии.
Разберём три реальных кейса из сурового банковского энтерпрайза, напишем и запустим агента прямо в эфире, честно обсудим грабли, на которые наступает бизнес при интеграции LLM.
Тем, кто придёт на эфир, дадим промокод AGENTS на скидку 10 000 ₽ на любой тариф курса.
👉 Занять место на вебинаре
💡 Изобретаем свои Comprehensions в Python
Многие знают о list, set и dict comprehensions. Но что, если вам нужен tuple comprehension или frozenset comprehension? В синтаксисе Python их не существует, но мы можем их имитировать.
Главный секрет: Генераторные выражения
Генераторные выражения (generator expressions) — это «строительные блоки», которые позволяют создавать итерируемые объекты на лету без выделения памяти под весь список.
Как это работает:
Если передать генераторное выражение в функцию как единственный аргумент, лишние скобки можно опустить:
# Вместо этого:
all((n > 1 for n in numbers))
# Пишем так:
all(n > 1 for n in numbers)
>>> numbers = [2, 1, 3, 4, 7]
>>> tuple(n**2 for n in numbers)
(4, 1, 9, 16, 49)
>>> word_fset = frozenset(w.lower() for w in ["Apple", "Orange", "Apple"])
frozenset({'apple', 'orange'})
from collections import Counter
words = Counter(w.strip() for w in text.split())
💥 Открытый вебинар | ИИ-агенты в продакшене: от хайпа к деньгам
Агенты уже везде. Но мало кто признаётся, сколько денег сжёг на бесконечных циклах, галлюцинациях в RAG и отсутствии мониторинга.
Полина Полунина, руководитель AI-направления Альфа-Банка, расскажет честно:
▪️ Чем агент отличается от «просто GPT с промптом» и когда бизнесу достаточно обычного LLM
▪️ 3 реальных кейса из корпоративной среды: что взлетело, а что нет
▪️ Live-демо работающего агента
▪️ ТОП-5 граблей, на которые наступают команды при внедрении
⏱️ 10 марта в 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
🔍 Сравнение тайп-чекеров: как они «видят» пустые списки
Когда вы пишете x = [], интерпретатор Python знает, что это список, но не знает, что в нем будет лежать. Разные тайп-чекеры решают эту загадку по-разному.
Стратегия 1: Все дозволено (`Any`)
Кто использует: Pyright, Pyre, Ty.
Как работает: Тайп-чекер просто помечает список как list[Any].
Плюс: Минимум ложных ошибок. Можно класть что угодно.
Минус: Нулевая безопасность. Ошибки (например, добавление списка вместо строки) проскочат в продакшен и вызовут краш в рантайме.
Стратегия 2: Анализ всех использований
Кто использует: Pytype.
Как работает: Чекер смотрит на весь код функции. Если вы добавили в список 1, а потом "foo", он выведет тип list[int | str].
Плюс: Максимально близко к поведению Python в рантайме.
Минус: Если ошибка закралась в начале функции, тайп-чекер может подсветить её только в самом конце (на `return`), что затрудняет отладку.
Стратегия 3: Вывод по первому использованию
Кто использует: Mypy, Pyrefly (по умолчанию).
Как работает: Тип фиксируется по первой операции append или add.
Пример: Если сначала добавили число, а потом пытаетесь добавить строку — вы получите ошибку сразу на строке с кодом.
Плюс: Ошибки подсвечиваются именно там, где они возникли. Это делает их максимально понятными и легко исправимыми.
🔗 Полный текст статьи
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека питониста
#буст
👍 На курсе по контролируемой разработке AI-агентов мы будем разбирать ровно то, о чём говорит Владислав в голосовом, но уже в формате системной практики.
📅 Старт курса — 20 апреля.
Если хотите разобраться, как строить управляемые агентные системы:
➡️ Присоединяйтесь.
P.S. С первого занятия будет практика: код и разбор реальных ошибок, а не только теория.
🐍 Лексикографический порядок в Python
Почему в Python "apple" > "animal" возвращает True, а "Apple" < "apple" — тоже True? Всё дело в лексикографическом порядке.
Python не просто знает алфавит, он смотрит на Unicode-код каждого символа.
✅ Сравнение идет посимвольно: первая пара, вторая и т.д.
✅ Как только найдено различие — результат готов.
✅ Если одна строка — префикс другой (напр. "cat" и `"catastrophe"`), то та, что короче, считается «меньшей».
Любая последовательность в Python (списки, кортежи, байтовые строки) сравнивается точно так же — индекс за индексом.
Пример с кортежами:
x = (45, 1, 13)
y = (45, 7, 4)
print(x < y) # True, потому что на индексе [1] единица меньше семерки.
.lower().TypeError.(приоритет, объект).
🛠 Git Submodules: как не плодить копипасту в ML-проектах
Представьте: у вас три команды (Fraud Detection, Credit Scoring и Trading). Всем им нужна одна и та же функция calculate_risk_score().
Обычно это превращается в кошмар:
1. Команды копируют код себе.
2. Одна команда находит баг и исправляет его.
3. Остальные два проекта остаются с багами, потому что даже не знают об исправлении.
Итог: «расползание» версий (version drift) и ошибки в продакшене.
✅ Решение: Git Submodules
Это способ вставить одну Git-репозиторий внутрь другого как подпапку. Вы не копируете код, а ссылаетесь на конкретный коммит в общем репозитории библиотек.
🚀 Шпаргалка по командам
1. Добавить общую библиотеку в проект:
git submodule add https://github.com/user/ml-utils.git ml-utils
ml-utils/ и файл .gitmodules, где прописана ссылка на репозиторий.git clone, папка с сабмодулем будет пустой. Нужно так:
git clone --recurse-submodules https://github.com/user/main-project.git
git submodule update --remote ml-utils
git add ml-utils
git commit -m "Update shared ML utils"