Практический Python для разработчиков: большой задачник
Большой задачник из 120 упражнений с проверкой кода: структуры данных, генераторы, объектная модель, многопоточность и asyncio для опытных разработчиков.
О курсе
Когда синтаксис языка уже привычен, сложности вызывают детали поведения стандартных инструментов. Потоковая обработка данных, управление системными ресурсами и фоновые корутины часто ведут себя иначе, чем ожидается при беглом чтении кода.
В этом задачнике вы будете писать решения руками и разбираться, как работают внутренние механизмы интерпретатора. Практика помогает предсказывать поведение программы при одновременном доступе к данным, сбоях и высокой нагрузке.
Основные темы
- Специализированные коллекции: очереди, скользящие окна, бинарный поиск и приоритизация элементов.
- Итераторы и генераторы: потоковые цепочки данных, экономный расход памяти и передача значений в корутины.
- Объектная модель и контекст: создание транзакционных менеджеров, гибкое сравнение объектов и метапрограммирование.
- Параллелизм и асинхронность: распределение вычислений по процессам, конкурентные запросы и корректная остановка сервисов.
- Производительность: поиск узких мест с помощью профилировщика и снижение потребления памяти.
Вам предстоит решать предметные задачи разного масштаба. Например, вы построите очередь событий для спасательного батискафа с динамическим пересчётом приоритетов на heapq или свяжете разнородные классы ставок через методы сравнения с возвратом NotImplemented.
Вас ждут текстовые уроки и практические задачи с автоматической проверкой. Вы учитесь в удобном для себя темпе. Если решение не получается, после трёх неудачных попыток откроются подсказки.
Чему научитесь
- Выбирать подходящие структуры данных для очередей с приоритетами и скользящих окон
- Строить генераторные цепочки с надёжным закрытием системных ресурсов при сбоях
- Создавать контекстные менеджеры для изоляции транзакций и отката изменений
- Настраивать согласованное сравнение пользовательских объектов без ошибок типов
- Разделять ввод-вывод и ресурсоёмкие вычисления между потоками и процессами
- Организовывать асинхронные очереди с контролем таймаутов и отменой задач
- Находить медленные участки алгоритмов и сокращать потребление оперативной памяти
Для кого
- Разработчикам, которые уверенно пишут базовый код на Python и хотят глубже понимать поведение рантайма
- Инженерам, желающим закрепить на практике работу со стандартной библиотекой, многопоточностью и asyncio
Формат
- 7 модулей и 18 уроков с текстовой теорией
- 120 задач по программированию с автоматической проверкой решений на платформе Латорна
- 27 вопросов на понимание ключевых механизмов и 234 встроенные подсказки
- Самостоятельное обучение в своём темпе
Что нужно на старте
- Уверенное владение базовым синтаксисом: функциями, циклами и обработкой исключений
- Опыт работы со стандартными коллекциями: списками, словарями, множествами и кортежами
- Понимание основ объектно-ориентированного программирования: создание классов и методов
Автор курса
Алексей Малышкин
Разрабатываю образовательные материалы по программированию, машинному обучению и анализу данных. Темы: Python-разработка, аналитика, ML-инструменты (LangChain, vector databases, AI agents), компьютерное зрение. Стараюсь объяснять технические концепции понятно и структурировано. Ранее преподавал на Stepik и обучил более 2000 студентов. Мой профиль на Stepik - https://stepik.org/users/273781420/profile Мой телеграм для связи @alexey_latorn
Программа
01Специализированные структуры данных и потоковая обработка2 урока
02Итераторы, генераторы и модуль itertools3 урока
03Функциональные идиомы и управление контекстом3 урока
04Объектная модель Python и метапрограммирование3 урока
05Параллелизм: потоки и процессы2 урока
06Асинхронное программирование с asyncio3 урока
07Оптимизация производительности, память и профилирование2 урока
Дополнительные материалы и практика
Задачи
- Удаление ключа из ChainMap в Python: проверка поведения del
- Обратный индекс на Python: группировка уникальных значений через defaultdict
- Подсчёт дефицита ресурсов в Python: квоты и суммы заявок
- ChainMap в Python: исправьте приоритет настроек и удаление переопределений
- Иерархия конфигурации в Python: изоляция настроек разных клиентов
- Скользящее окно Python: найдите кратчайшую подстроку с тремя символами
- Объединение команд и подсчёт рейтинга на Python
- Кольцевой буфер Python: поворот алфавита и шифрование строки
- Почему bisect нельзя применять к куче heapq: вопрос по Python
- Очередь с приоритетами Python: выбор максимума с учётом срока жизни
- Heapq на Python: минимальная стоимость объединения элементов
- Heapq на Python: обновление приоритетов в очереди событий
- Bisect на Python: найдите ближайшую точку на числовой прямой
- GeneratorExit и yield при close(): вопрос по генераторам Python
- Генераторы Python: синхронизация потоков после фильтрации
- Генераторы Python: разделите поток между двумя потребителями
- Исправьте остановку генераторного конвейера Python
- Send() до первого next(): ошибка запуска генератора Python
- Генератор с send() на Python: накопление порций и смена лимита
- Учёт трафика через генератор Python: сумма и динамический лимит
- Генератор Python: фильтрация выбросов с изменяемым порогом
- Как groupby группирует несортированные данные: тест itertools Python
- Itertools на Python: ленивый перебор комбинаций параметров
- Itertools на Python: разбейте поток на партии с лимитом
- Itertools на Python: объедините генераторы в непрерывный поток
- Groupby на Python: сводка последовательных серий событий
- Functools.wraps в Python: имя функции и атрибут wrapped
- Декоратор Circuit Breaker на Python: остановка вызовов после сбоев
- Декораторы Python: проверка цепочки wrapped и метаданных функции
- Декоратор Python: логирование только медленных вызовов
- Кэширование Python: постройте ключ из выбранных аргументов функции
- Класс-декоратор Python: когда вызывается init
- Класс-декоратор метода Python: почему теряется self
- Класс-декоратор Python: ограничение изменения результата между вызовами
- Класс-декоратор Python: баланс доступных вызовов функции
- exit в Python: аргументы исключения и подавление ошибки
- Контекстный менеджер Python: подавление выбранных типов исключений
- Контекстный менеджер Python: вложенные транзакции и глубина входа
- Контекстный менеджер Python: откат списания ресурсов при ошибке
- Изменение хеша объекта в set: вопрос по Python hash и eq
- NotImplemented в lt: как Python сравнивает объекты
- Сравнение объектов Python: lt и несовместимые группы
- Python set: найдите объекты с изменённым хешем
- Rich comparisons Python: ранжирование объектов разных классов
- Дескриптор и dict в Python: кто имеет приоритет при чтении
- Дескрипторы Python: почему значение разделяется между экземплярами
- Дескрипторы Python: валидация и сброс кэша зависимых свойств
- Дескрипторы Python: значения по умолчанию и удаление переопределений
- Дескриптор Python: однократная запись и setname
- Когда вызывается initsubclass в Python: тест
- Метаклассы Python: передача аргументов класса в initsubclass
- Python initsubclass: запрет переопределения констант
- Метакласс Python: регистрация методов в пространстве имён
- Python initsubclass: проверка порядка миграций схемы
- Генератор скользящего среднего на Python со сбросом окна
- Генераторы Python: закройте второй источник при ошибке первого
- Фильтрация потока Python: исключения и гарантированное закрытие генератора
- Генератор пачек Python: подтверждение обработки после yield
- Потоковая запись на Python: ротация файлов и освобождение ресурсов
- Генераторы Python: объединение закрываемых источников данных
- Генератор Python: центрирование данных в скользящем окне
- Генератор с состоянием Python: реализуйте переключатель с гистерезисом
- Send() в Python: накопление импульсов и квантование смещения
- Генератор Python: пиковое значение и изменение порога тревоги
- Генератор Python: управление направлением движения и зоной разворота
- Генератор с send() в Python: потоковая замена символов
- Генератор Python: сравнение показаний двух датчиков с допуском
- Генератор Python: ограничение скорости обработки команд
- Генератор Python: динамическая регулировка скорости конвейера
- Скользящие окна Python: генерация кортежей без загрузки всего потока
- Итераторы Python: сборка кадра из двух потоков без лишнего чтения
- Itertools на Python: фильтрация декартова произведения параметров
- Однопроходный итератор Python: читайте по одной серии одинаковых элементов
- Вызов close() до первого next(): выполнится ли finally в генераторе Python
- GeneratorExit и except Exception: закрытие генератора Python
- Ленивые генераторы Python: порядок вызовов next() в конвейере
- Rate limiter на Python: декоратор со скользящим окном запросов
- Retry и fallback на Python: декоратор повторов с резервным вызовом
- Декоратор кэширования Python: ограничение веса и вытеснение по FIFO
- Retry-декоратор Python: преобразование исключений после исчерпания попыток
- Кэширование Python: декоратор с таймаутом простоя
- Декоратор Python: сглаживание повторных координат с допустимым отклонением
- Декоратор Python: валидация направления и размера перемещения
- Декоратор кэширования Python: проверка свежести результата
- Класс-декоратор Python: изменение аргумента первых N вызовов
- Класс-декоратор Python: буфер событий и пакетная запись
- Класс-декоратор Python: переключение между основной и резервной репликой
- Класс-декоратор Python: проверка чередования фаз вызова
- Класс-декоратор Python: сохранение каждого N-го результата
- Исправьте класс-декоратор Python для методов экземпляра
- Класс-декоратор Python: ограничение глубины рекурсии
- Класс-декоратор Python: переключение источника после ошибки
- Класс-декоратор Python: проверка монотонности результатов
- Контекстный менеджер Python: временная подмена списка с восстановлением
- Проверка контекстного менеджера Python: подавление и замена исключения
- Contextmanager на Python: транзакционные изменения словаря с квотой
- Контекстный менеджер Python: временные настройки и сбор результатов
- Python eq: сравнение объекта с диапазоном допустимых значений
- Дескриптор Python: проверка связанных полей low и high
- Дескриптор Python без get: журнал присваиваний в set
- MRO в Python: проверка порядка примесей в наследовании
- Метакласс Python: проверка парных методов prepare и render
- Python initsubclass: иерархический реестр классов
- ProcessPoolExecutor и lambda: когда возникает ошибка pickle
- ProcessPoolExecutor Python: обработка результатов и ошибок сериализации
- Concurrent.futures Python: первые K успешных результатов двух пулов
- Потоки и процессы Python: аварийная остановка двухэтапного конвейера
- ThreadPoolExecutor и ProcessPoolExecutor: загрузка и обработка данных
- Concurrent.futures Python: выбор исполнителя по размеру пакета
- Потоки и процессы Python: двухэтапное резервное копирование
- Multiprocessing.Queue и join(): причина взаимной блокировки Python
- Остановка пула процессов Python: Queue, маркеры завершения и join
- Multiprocessing Python: ограничение очереди семафором
- Процесс и потоки Python: двухфазная обработка матрицы
- Queue и Lock в Python: дедупликация заявок между рабочими потоками
- Threading.Lock на Python: атомарное изменение общего словаря
- Asyncio TaskGroup и gather: что происходит при ошибке корутины
- Asyncio TaskGroup: сбор результатов с отменёнными задачами
- Asyncio gather: отмена оставшихся задач при ошибке
- Asyncio TaskGroup: обработка ошибок параллельного опроса
- Asyncio TaskGroup: двухфазная проверка и публикация конфигурации
- Asyncio gather и TaskGroup: соберите исключения конкурентных задач
- Race condition в asyncio: почему однопоточность не защищает счётчик
- Asyncio Queue и Semaphore: конвейер с ограничением нагрузки
- Asyncio Queue: вытеснение старейшей заявки без блокировки поставщика
- Asyncio Lock и Semaphore: учёт результатов обработки контейнеров
- Asyncio: восстановление пула воркеров после ошибки
- Asyncio Queue: объединение парных событий по идентификатору
- Asyncio: две очереди с приоритетом и общим семафором
- Почему зависает asyncio.Queue.join(): аудит вызовов taskdone
- Asyncio Queue: резервная очередь при перегрузке основного конвейера
- Asyncio Queue: обработка ошибок воркеров и подтверждение taskdone
- Asyncio CancelledError: почему except Exception не ловит отмену
- Asyncio: проверка реакции задачи на cancel() с таймаутом
- Graceful shutdown Python: завершение текущей работы перед остановкой воркера
- Asyncio timeout: остановка по таймауту и внешней отмене
- Asyncio shield: сохранение начатой работы при повторной отмене
- CProfile Python: разница между tottime и cumtime в отчёте
- CProfile и pstats: найдите доминирующую операцию в профиле Python
- Модуль dis Python: найдите инструкции возврата в байт-коде
- Модуль dis Python: аудит повторяющихся инструкций LOADGLOBAL
- slots в Python: за счёт чего экономится память
- Наследование и slots в Python: почему возвращается dict
- Tracemalloc Python: группировка выделений памяти по стеку вызовов
- Утечка памяти Python: найдите буфер, удерживающий объекты
- slots в Python: проверка полей и всей иерархии наследования
