1. Python Core: синтаксис, типы, функции, ООП и стандартная библиотека
Python Core: синтаксис, типы, функции, ООП и стандартная библиотека
Python — основной язык этого курса. В бэкенде на Python вы будете писать веб‑приложения и API, работать с базами данных, очередями, файловой системой, сериализацией данных (JSON), логированием, обработкой ошибок и конкурентностью. Всё это опирается на базовые знания Python Core: синтаксис, типы данных, функции, объектную модель, ООП и стандартную библиотеку.
В этой статье мы разберём фундамент, на который дальше будут «наслаиваться» фреймворки (например, FastAPI/Django), базы данных (PostgreSQL), инструменты (Docker) и практики (тестирование, CI/CD).
Как писать и запускать Python-код
Интерпретатор и файлы
Python — интерпретируемый язык: код выполняется интерпретатором python.
* Запуск файла: python app.py
* Интерактивный режим (REPL): python и ввод команд по одной
Минимальный пример
Синтаксис: базовые конструкции
Комментарии и отступы
* Комментарий начинается с # и действует до конца строки.
* Блоки кода задаются отступами, а не фигурными скобками.
Переменные: это имена, а не «коробки»
В Python переменная — это имя, которое ссылается на объект в памяти.
Здесь a и b ссылаются на один и тот же список.
Операторы и выражения
Арифметика: +, -, , /, // (целочисленное деление), % (остаток), ** (степень)
* Сравнения: ==, !=, <, <=, >, >=
* Логика: and, or, not
* Принадлежность: in (например, "a" in "cat")
Проверка того же объекта*: is (важно отличать от ==)
Управляющие конструкции
Условия
Циклы
for в Python перебирает элементы итерируемого объекта (например, списка). Итерируемый объект — это тот, по которому можно последовательно пройтись.
while выполняется, пока условие истинно.
Полезные конструкции:
* break — выйти из цикла
* continue — перейти к следующей итерации
Генераторы списков (list comprehension)
Это компактный способ создать список из другого итерируемого объекта.
Типы данных: числа, строки, коллекции
Встроенные типы и изменяемость
Изменяемость означает: можно ли поменять объект «на месте», не создавая новый.
| Тип | Пример | Изменяемый | Где часто нужен в бэкенде |
|---|---:|:---:|---|
| int | 42 | нет | идентификаторы, счётчики |
| float | 3.14 | нет | измерения, проценты (осторожно с точностью) |
| bool | True | нет | флаги, проверки |
| str | "api" | нет | URL, тексты, JSON-ключи |
| list | [1, 2] | да | наборы элементов, результаты запросов |
| tuple | (1, 2) | нет | неизменяемые структуры, ключи |
| dict | { "a": 1 } | да | JSON-подобные данные, конфиги |
| set | {1, 2} | да | уникальные значения, проверки |
| NoneType | None | нет | отсутствие значения |
Официально про встроенные типы: Built-in Types — Python Documentation
Строки
Строки в Python — это Unicode.
Частые операции:
* len(s) — длина
* s.lower(), s.upper()
* s.strip() — убрать пробелы по краям
* s.split(",") — разбить
* ",".join(parts) — склеить
Списки, кортежи, множества
* list — когда нужна последовательность, которую вы будете менять
* tuple — когда данные не должны меняться (или нужны как ключ словаря)
* set — когда важна уникальность и быстрые проверки x in set
Словари (dict)
Словарь хранит пары ключ → значение.
В бэкенде dict — базовый формат для данных, близкий к JSON.
Функции: параметры, возвращаемые значения, области видимости
Функция — это именованный блок кода, который можно вызывать многократно.
Параметры: позиционные и именованные
Важно: значения параметров по умолчанию вычисляются один раз в момент определения функции. Поэтому нельзя использовать изменяемые значения (например, []) как безопасный дефолт.
Правильный паттерн:
args и *kwargs
args собирает лишние позиционные аргументы в кортеж
*kwargs собирает лишние именованные аргументы в словарь
Это очень распространено в библиотечном и фреймворк‑коде.
Области видимости (scope)
Когда вы обращаетесь к имени, Python ищет его в определённом порядке: сначала локально в функции, затем во внешних областях, затем в глобальной области модуля, затем во встроенных именах.
Практическое правило:
* старайтесь передавать значения параметрами * минимизируйте использование глобальных переменных
Лямбда-функции
lambda — короткая анонимная функция (часто в сортировках и преобразованиях).
Декораторы: идея на пальцах
Декоратор — это функция, которая принимает функцию и возвращает новую функцию (обычно добавляя поведение). В веб‑фреймворках декораторы встречаются постоянно (роуты, авторизация, кэширование).
Документация: functools — Python Documentation
Исключения: как обрабатывать ошибки правильно
Исключение — это механизм сигнализировать об ошибке и прерывать обычный поток выполнения.
try / except / else / finally
* except выполняется, если в try случилось исключение указанного типа
* else выполняется, если исключения не было
* finally выполняется всегда (удобно для освобождения ресурсов)
В бэкенде корректная обработка исключений — основа надёжности API.
Модули, пакеты и импорт
Модуль
Модуль — это файл .py. Импорт выполняет код модуля и делает доступными его имена.
Пакет
Пакет — это директория с Python-кодом (обычно с файлом __init__.py).
Практический смысл для бэкенда:
* вы будете организовывать код по пакетам: app/, app/api/, app/services/, app/repositories/
Про импорт: The import system — Python Documentation
ООП в Python: классы, методы, наследование
ООП (объектно‑ориентированное программирование) помогает описывать сущности домена (например, пользователь, заказ), группировать данные и поведение, создавать расширяемую архитектуру.
Класс и объект
Термины:
класс* — «чертёж»
объект (экземпляр)* — конкретное созданное значение этого класса
* self — ссылка на текущий объект
Инкапсуляция и соглашения
В Python нет строгой приватности, но есть соглашение:
* name — публичное поле
* _name — внутреннее поле (не для внешнего использования)
Наследование и полиморфизм
Наследование: один класс расширяет другой.
Полиморфизм в практике бэкенда означает: разные реализации ведут себя одинаково с точки зрения интерфейса (например, разные репозитории: in‑memory для тестов и PostgreSQL для продакшена).
Композиция чаще полезнее наследования
Композиция — когда класс содержит другие объекты и использует их.
Это часто делает архитектуру проще и гибче, чем глубокие иерархии наследования.
Специальные методы (dunder methods)
Методы вида __name__ называют dunder (double underscore). Они позволяют объектам работать со встроенными операциями языка.
Пример: __repr__ для удобного представления в логах.
Справочник: Data model — Python Documentation
dataclasses для «классов-данных»
Когда класс в основном хранит данные, удобно использовать dataclass.
Плюсы:
* автоматически создаётся __init__
* автоматически создаётся удобный __repr__
Документация: dataclasses — Python Documentation
Контекстные менеджеры и with
Контекстный менеджер гарантирует, что ресурс будет корректно освобождён, даже если возникла ошибка.
Классический пример — работа с файлами:
Здесь файл будет закрыт автоматически.
Стандартная библиотека: минимум, который нужен бэкенду
Стандартная библиотека — это модули, которые идут вместе с Python. Она огромная, но в бэкенде есть «костяк», который встречается постоянно.
Работа с путями и файлами: pathlib
pathlib предоставляет объектный интерфейс к путям (часто удобнее, чем os.path).
Документация: pathlib — Python Documentation
Даты и время: datetime
Документация: datetime — Python Documentation
JSON: json
В API вы постоянно сериализуете данные в JSON.
Документация: json — Python Documentation
Регулярные выражения: re
Регулярные выражения помогают искать и валидировать текст по шаблону (используйте умеренно, не усложняйте).
Документация: re — Python Documentation
Логирование: logging
print не подходит для продакшена. Логи должны иметь уровни, формат, вывод в файлы/системы.
Документация: logging — Python Documentation
Типизация: typing
Подсказки типов улучшают читаемость и помогают статическим анализаторам.
Документация: typing — Python Documentation
Полезные контейнеры и инструменты
* collections (например, defaultdict, deque): collections — Python Documentation
* itertools для эффективных итераций: itertools — Python Documentation
* contextlib для своих контекстных менеджеров: contextlib — Python Documentation
Стиль кода: читаемость и предсказуемость
В индустрии принято ориентироваться на PEP 8 (гайд по стилю). Это важно, потому что бэкенд‑код читают и поддерживают командой.
* Гайд: PEP 8 — Style Guide for Python Code
Базовые привычки:
* осмысленные имена (без a, b, tmp, если можно лучше)
* небольшие функции
* явная обработка ошибок
* минимум побочных эффектов (когда функция «тайно» меняет внешние данные)
Итог
К этому моменту у вас есть фундамент:
* синтаксис и управление потоком
* модель «имена ссылаются на объекты» и разница между == и is
* основные типы данных и коллекции
функции, параметры, args/**kwargs, декораторы на уровне идеи
* исключения и гарантии finally
* основы модулей/пакетов
* ООП, dataclass, специальные методы
* ключевые модули стандартной библиотеки для бэкенда
Дальше этот фундамент будет применяться к реальным бэкенд‑задачам: проектная структура, HTTP, работа с БД, миграции, конфигурация, логирование, тестирование, асинхронность и развёртывание.