Python
От интерпретатора до FastAPI-приложения, готового к развёртыванию: SQLAlchemy, Alembic, JWT, Docker, CI
Уровень: Начальный · около 35 ч · после курса: Соберёшь FastAPI-приложение с SQLAlchemy, Alembic, JWT, тестами, Docker и CI
Чему научишься
- Понимать как работает CPython, GIL и event loop
- Писать идиоматичный Python: comprehensions, decorators, context managers
- Применять dataclass, Protocol, ABC для проектирования типов
- Использовать asyncio для IO-bound и multiprocessing для CPU-bound
- Покрывать код тестами на pytest с fixtures и mocking
- Поднимать REST API на FastAPI с Pydantic и SQLAlchemy
- Упаковывать приложение в Docker и описывать CI pipeline
Уроки курса (60)
Модуль 1 · Старт и инструменты
Установить Python, освоить venv, pip, pyproject.toml и REPL
- Установка Python и первый запуск - Поставить интерпретатор, понять что такое REPL и запустить первый скрипт
- Интерпретатор, байт-код и .pyc - Как CPython превращает исходник в выполняемый код и зачем нужна shebang-строка
- Виртуальные окружения: venv и изоляция зависимостей - Зачем не ставить пакеты в системный Python и как создать изолированное окружение для каждого проекта
- pip, requirements.txt и pyproject.toml - Как ставить пакеты, фиксировать зависимости и почему pyproject.toml вытесняет requirements
- REPL и отладчик: ipython, pdb, breakpoint - Как быстро экспериментировать с кодом и пошагово отлаживать программы
Модуль 2 · Типы и значения
Числа без переполнения, строки и байты, truthy/falsy, mutable vs immutable, type hints
- Числовые типы: int, float, Decimal, complex - Целые без переполнения, плавающая точка с подвохами, Decimal для денег
- Строки и байты: str vs bytes, кодировки, f-strings - Чем отличаются текст и бинарные данные, как работает Unicode и форматирование строк
- Булевы значения, None и truthy/falsy - Что считается «истиной» в условиях, чем `is` отличается от `==` и зачем нужен None
- Переменные и изменчивость: ссылки, mutable vs immutable - Что хранит переменная, чем отличаются изменяемые объекты от неизменяемых и как избежать ловушек
- Type hints: typing, mypy, Optional, Union - Как декларативно описывать типы и проверять их статическим анализатором
Модуль 3 · Поток выполнения
Условия, циклы, pattern matching, comprehensions и исключения
- Условные конструкции: if, elif, else, тернарный и walrus - Ветвление логики через if/elif/else, краткие формы и оператор моржа :=
- Циклы: for, while, range, enumerate, zip, break/continue - Все варианты циклов в Python, утилиты для итерации и идиома for-else
- match-case: structural pattern matching - Не просто switch - сопоставление по структуре, типу, классу и литералам
- Comprehensions: list, dict, set и generator - Компактный синтаксис для создания коллекций из iterable
- Исключения: try/except/else/finally и кастомные exceptions - Идиоматичная обработка ошибок: иерархия, цепочки, custom exceptions, EAFP
Модуль 4 · Функции, контекст и модули
Функции и декораторы, затем with и структура проекта: модули, пакеты, __init__.py
- Функции: def, return, аннотации, scope (LEGB) - Объявление функций, возврат значений, docstrings и правила области видимости
- args, kwargs, positional-only и keyword-only - Гибкие списки параметров: *args, **kwargs и разделители / и *
- Замыкания и lambda: nonlocal, partial, functools - Захват переменных вложенными функциями, синтаксис анонимных функций и утилиты functools
- Рекурсия: базовый случай, стек, @lru_cache - Рекурсивные функции, sys.setrecursionlimit, мемоизация через lru_cache, когда итерация лучше
- Декораторы: @decorator, functools.wraps, типичные паттерны - Как функция модифицирует другую функцию: синтаксис, базовые примеры, wraps
- Продвинутые декораторы: параметризованные, class-based, classmethod - Декораторы с аргументами, класс-декораторы, property/classmethod/staticmethod
- Контекстные менеджеры: with, contextlib, ExitStack - Декларативное управление ресурсами через with и создание собственных менеджеров
- Импорты и пакеты: import, __init__.py, sys.path - Как Python находит и загружает модули, абсолютные и относительные импорты
Модуль 5 · Коллекции
list, tuple, NamedTuple, dict, set и специализированные коллекции из collections
- Списки: list, методы, slice, sort vs sorted - Динамические массивы Python: операции, срезы, сортировка и подводные камни
- Кортежи и NamedTuple: иммутабельные структуры - tuple, namedtuple, typing.NamedTuple - когда лучше чем list или dataclass
- Словари: dict, методы, get, comprehension, упорядоченность - Ассоциативные массивы Python: операции, идиомы, performance, dict как замена elif
- Множества: set, frozenset, операции - Уникальные элементы с быстрым поиском: объединение, пересечение, разность
- collections: Counter, deque, defaultdict, ChainMap - Специализированные коллекции стандартной библиотеки
Модуль 6 · ООП
Классы, dunder-методы, наследование и MRO, dataclass и Enum, ABC и Protocol
- Классы: class, __init__, self, методы - Основы ООП в Python - объявление класса, конструктор и методы экземпляра
- Атрибуты и методы: class vs instance, classmethod, staticmethod, property - Разница между атрибутами класса и инстанса, типы методов и контроль доступа
- Dunder-методы: __repr__, __eq__, __hash__, __len__, __iter__ - Magic-методы делают классы интегрированными с операторами и встроенными функциями
- Наследование, super(), MRO и множественное наследование - Подклассы, цепочка super(), алгоритм C3 для MRO, mixins и diamond inheritance
- dataclass и Enum: декларативные классы и перечисления - @dataclass для автогенерации методов, Enum для типобезопасных констант
- ABC и Protocol: абстрактные классы и duck typing с типами - abstractmethod для явного наследования, Protocol для structural subtyping
Модуль 7 · Итерация и асинхронность
Iterators, generators, asyncio (event loop, gather, Queue), GIL и threading, multiprocessing
- Итераторы: протокол __iter__/__next__ и iter() - Как Python обходит коллекции - протокол итерации, разница iterable и iterator
- Генераторы: yield, generator expressions, lazy evaluation - Простой способ создавать итераторы через yield, бесконечные последовательности, pipelines
- asyncio: event loop, async/await, корутины - Основы асинхронного программирования в Python для IO-bound задач
- asyncio: gather, create_task, Queue, timeout, отмена - Продвинутые паттерны: параллельное выполнение, очереди, таймауты и обработка ошибок
- GIL и threading: когда потоки помогают - Global Interpreter Lock, threading модуль и почему asyncio часто лучше
- multiprocessing: настоящая параллельность через процессы - Обход GIL для CPU-bound задач через отдельные процессы и ProcessPoolExecutor
Модуль 8 · Packaging и стандартная библиотека
pyproject.toml и build, pathlib/subprocess/shutil, datetime/json/csv, logging
- Packaging: pyproject.toml, build, publish to PyPI - Как упаковать проект в wheel, опубликовать на PyPI и сделать CLI через entry points
- stdlib: os, pathlib, subprocess, shutil - Работа с файловой системой, путями, процессами и копированием файлов
- stdlib: datetime, zoneinfo, json, csv - Работа с датами и временем, сериализация в популярные форматы
- logging: уровни, handlers, formatters, root pitfalls - Стандартный механизм журналирования вместо print: настройка и типичные ловушки
Модуль 9 · Тестирование и качество
pytest (basics, fixtures, mocking), линтеры (ruff), type checking (mypy), pre-commit hooks
- pytest: основы, assert, параметризация, маркеры - Тестирование на pytest - простой синтаксис, parametrize и organising тестов
- pytest fixtures: setup через dependency injection - Переиспользование test setup через @pytest.fixture, scope, conftest, parametrize
- Mocking: unittest.mock, patch, side_effect - Изоляция тестов от внешних зависимостей через Mock, MagicMock и patch
- Линтеры и типы: ruff, black, mypy, pre-commit - Автоматическое поддержание качества кода: форматирование, линтинг, type checking
Модуль 10 · Веб-бэкенд и развёртывание
WSGI/ASGI, FastAPI, Pydantic, SQLAlchemy, Alembic, JWT auth, Docker и CI, финальный проект. Эксплуатация - secrets, TLS, бэкапы, observability - в отдельных треках
- WSGI и ASGI: sync vs async серверы - Стандарты взаимодействия между Python-приложением и веб-сервером - WSGI и ASGI
- FastAPI: эндпоинты, параметры, body, OpenAPI - Создание REST API на FastAPI: path/query/body параметры, auto-документация
- Pydantic: BaseModel, валидаторы, Settings - Type-safe валидация данных - модели, кастомные валидаторы, settings из env
- SQLAlchemy ORM: модели, session, queries - Работа с реляционными БД через ORM - модели, отношения, запросы, identity map
- Alembic: миграции БД, autogenerate, окружения - Version control для схемы БД - создание, применение, откат миграций
- Аутентификация: JWT, login endpoint, Depends - Безопасный auth для REST API - JWT токены, password hashing, защита endpoints
- Docker и CI: Dockerfile для Python, multi-stage, GitHub Actions - Контейнеризация Python приложений и автоматизация деплоя через CI/CD
- Финальный проект: REST API на FastAPI + SQLAlchemy + JWT + Docker - Соберём всё что выучили в полноценный TODO REST API с тестами и контейнеризацией
Дополнительный модуль · Асинхронные сообщения
Не входит в основной backend-трек и идёт после финального проекта: RabbitMQ и Kafka, aio-pika и aiokafka, идемпотентность, retry, outbox, DLQ
- Брокеры сообщений: AMQP/RabbitMQ vs Kafka vs Pulsar - Зачем нужны message brokers и как выбрать между RabbitMQ, Kafka и Pulsar
- RabbitMQ с aio-pika: producer, consumer, ack, DLQ - Async работа с RabbitMQ - публикация, потребление, гарантии доставки, dead letter queue
- Kafka с aiokafka: topics, partitions, consumer groups, offsets - Async работа с Kafka: producer, consumer groups, управление offset и границы гарантий доставки
- Consumer patterns: идемпотентность, retry, outbox, graceful shutdown - Паттерны надёжных консумеров: идемпотентность, retry с backoff, outbox, очереди задач