Python
От интерпретатора до прод-готового FastAPI приложения
Уроки курса (60)
- Установка Python и первый запуск — Поставить интерпретатор, понять что такое REPL и запустить первый скрипт
- Интерпретатор, байт-код и .pyc — Как CPython превращает исходник в выполняемый код и зачем нужна shebang-строка
- Виртуальные окружения: venv и изоляция зависимостей — Зачем не ставить пакеты в системный Python и как создать изолированное окружение для каждого проекта
- pip, requirements.txt и pyproject.toml — Как ставить пакеты, фиксировать зависимости и почему pyproject.toml вытесняет requirements
- REPL и отладчик: ipython, pdb, breakpoint — Как быстро экспериментировать с кодом и пошагово отлаживать программы
- Числовые типы: 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 — Как декларативно описывать типы и проверять их статическим анализатором
- Условные конструкции: 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
- Контекстные менеджеры: with, contextlib, ExitStack — Декларативное управление ресурсами через with и создание собственных менеджеров
- Функции: def, return, аннотации, scope (LEGB) — Объявление функций, возврат значений, docstrings и правила области видимости
- args, kwargs, positional-only и keyword-only — Гибкие списки параметров: *args, **kwargs и разделители / и *
- Замыкания и lambda: nonlocal, partial, functools — Захват переменных вложенными функциями, синтаксис анонимных функций и утилиты functools
- Декораторы: @decorator, functools.wraps, типичные паттерны — Как функция модифицирует другую функцию: синтаксис, базовые примеры, wraps
- Продвинутые декораторы: параметризованные, class-based, classmethod — Декораторы с аргументами, класс-декораторы, property/classmethod/staticmethod
- Списки: 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 — Специализированные коллекции стандартной библиотеки
- Классы: 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
- Итераторы: протокол __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
- Импорты и пакеты: import, __init__.py, sys.path — Как Python находит и загружает модули, абсолютные и относительные импорты
- 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: настройка и типичные ловушки
- 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
- 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, OAuth2 password flow, 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 с тестами и контейнеризацией
- Брокеры сообщений: 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 management, exactly-once
- Consumer patterns: идемпотентность, retry, outbox, graceful shutdown — Production-ready паттерны для консумеров: идемпотентность, retry с backoff, outbox, task queues
- Рекурсия: базовый случай, стек, @lru_cache — Рекурсивные функции, sys.setrecursionlimit, мемоизация через lru_cache, когда итерация лучше