Python для разработчика: средний уровень
Python для разработчика среднего уровня: окружения и зависимости, устройство пакетов, итераторы, типизация, объектная модель и надёжные CLI-приложения.
Материалы раздела
- Виртуальное окружение venv: как изолировать Python-проект — Виртуальное окружение отделяет интерпретатор и устанавливаемые пакеты одного проекта от пакетов другого. Благодаря этому два приложения на одном компьютере могут использовать…
- pip и requirements.txt: установка и фиксация зависимостей — pip устанавливает Python-дистрибутивы из индекса, локального каталога или файла и размещает их в окружении выбранного интерпретатора.
- Пакеты и импорты Python: __init__.py и поиск модулей — Импорт в Python не вставляет текст одного файла в другой. Интерпретатор находит модуль по полному имени, создаёт объект модуля, помещает его в sys.modules до выполнения…
- __name__ == '__main__' и python -m: как запускается модуль — У каждого загруженного модуля есть глобальный атрибут __name__. Если файл выбран как верхняя точка выполнения, Python задаёт ему имя __main__.
- pyproject.toml и src-layout: структура Python-проекта — Файл pyproject.toml хранит стандартные метаданные проекта и сообщает инструментам, какой build backend использовать.
- Кортежи и распаковка в Python: обмен и разбор значений — Кортеж — упорядоченная последовательность, которую нельзя изменить после создания. Он удобен для небольшого фиксированного набора связанных значений: координаты, границы…
- List, dict и set comprehensions без нечитаемой вложенности — Comprehension строит новую коллекцию из итерируемого источника: выражение описывает результат, а следующие части задают перебор и фильтр.
- *args, **kwargs и управляемые параметры функций Python — Сигнатура функции задаёт не только имена параметров, но и допустимый способ передачи каждого значения. Python различает позиционные-only, позиционные или именованные,…
- Функции высшего порядка и callbacks в Python — Функция в Python — такой же объект, как строка или список: её можно присвоить переменной, положить в коллекцию, передать аргументом и вернуть из другой функции.
- Протокол итератора Python: iter, next и StopIteration — Цикл for умеет обходить списки, строки, файлы и пользовательские объекты благодаря единому протоколу. Итерируемый объект предоставляет итератор через iter(obj), а итератор выдаёт…
- Генераторы и yield: ленивое получение значений — Генераторная функция содержит yield и при вызове создаёт объект-генератор, не выполняя тело целиком. Каждый next продолжает вычисление до ближайшего yield, отдаёт значение и…
- itertools: ленивые цепочки, срезы и группировка данных — Модуль itertools собирает небольшие инструменты для ленивой обработки последовательностей. Они принимают итерируемые источники, включая списки, и возвращают итераторы, поэтому…
- collections в Python: Counter, defaultdict и deque — Стандартный модуль collections предлагает контейнеры для распространённых моделей данных. Counter считает хешируемые элементы, defaultdict создаёт значение при обращении к…
- Аннотации типов Python: коллекции, объединения и None — Аннотации описывают ожидаемые типы аргументов, результатов и переменных. Они помогают редактору и статическому анализатору находить несогласованные операции до запуска, но…
- Классы и экземпляры Python: состояние, методы и атрибуты — Класс задаёт поведение и начальную организацию данных, а экземпляр представляет конкретный объект со своим состоянием.
- Композиция и наследование в Python: как выбрать связь — Наследование выражает отношение «является»: подкласс обещает вести себя как более общий базовый тип. Композиция выражает отношение «содержит» или «использует»: один объект хранит…
- dataclass в Python: классы данных без шаблонного кода — Декоратор @dataclass строит служебные методы класса по объявленным полям: обычно __init__, читаемый __repr__ и сравнение __eq__.
- property в Python: проверяемое управление атрибутами — Атрибут экземпляра удобно читать напрямую, пока любое присваивание считается допустимым. Но если значение должно удовлетворять правилу, обычное поле позволяет нарушить инвариант…
- Специальные методы Python: repr, len и контейнерный протокол — Специальные методы связывают пользовательский класс с синтаксисом и встроенными функциями Python. Выражение len(obj) находит __len__ на типе объекта — концептуально это похоже на…
- Равенство и хешируемость в Python: ключи словаря и set — Словарь и множество должны быстро находить уже сохранённый объект. Для этого Python сначала использует хеш, а затем подтверждает совпадение проверкой равенства.
- Поверхностная и глубокая копия объектов Python — Присваивание в Python не копирует объект: оно создаёт ещё одно имя для той же ссылки. Поверхностная копия создаёт новый внешний контейнер, но оставляет ссылки на вложенные…
- Пользовательские исключения Python и цепочка raise from — Пользовательское исключение обозначает ошибку на языке предметной области. Вместо расплывчатого ValueError вызывающий код может получить OrderFormatError или PaymentRejectedError…
- Контекстные менеджеры Python: with и гарантированная очистка — Контекстный менеджер связывает получение ресурса с обязательным завершением работы. Инструкция with вызывает вход в контекст, выполняет блок и затем запускает выход даже при…
- pathlib: переносимая работа с путями и каталогами — Модуль pathlib представляет путь объектом, а не строкой с вручную подобранными разделителями. Оператор / добавляет компонент пути, методы отвечают за чтение, запись, поиск и…
- CLI-проект на Python: пакет, argparse, JSON и logging — Небольшой CLI становится поддерживаемым проектом, когда разбор аргументов, бизнес-логика, хранение данных и точка входа разделены.