1. Python: основы, стиль, ООП, типизация и работа с данными
Python: основы, стиль, ООП, типизация и работа с данными
Зачем эта статья в курсе с переходом на C++
Python и C++ часто используют вместе: Python — для быстрых прототипов, скриптов, анализа данных и автоматизации, C++ — для производительности и низкоуровневого контроля. Чтобы грамотно увязать их в одном проекте, нужно хорошо понимать:В следующих статьях курса мы будем переходить к C++ и к связкам Python↔C++ (например, через расширения и биндинги). Сейчас задача — сделать фундамент на стороне Python.
!Карта соответствий тем Python и будущего перехода к C++
Среда разработки и стиль кода
Версия Python и виртуальные окружения
Рекомендуется Python 3.11+ (или 3.12). В проектах обычно используют виртуальное окружение — отдельную папку с зависимостями, чтобы не смешивать библиотеки разных проектов.PEP 8 и читабельность
PEP 8 — это руководство по стилю: как называть переменные, как форматировать код, где ставить пробелы. Это важно не из-за «красоты», а потому что:Источник: PEP 8 — Style Guide for Python Code
Практический минимум:
snake_caseCamelCaseUPPER_CASEblack), но главное — единый стиль в проектеБазовый синтаксис и модель выполнения
Переменные и присваивание
В Python переменная — это имя, которое ссылается на объект.Это отличается от C++-переменной, которая обычно связана с конкретным типом и областью памяти (хотя в C++ тоже есть ссылки/указатели, но модель другая).
Управляющие конструкции
range(3) генерирует числа 0, 1, 2 без хранения всего списка в памяти.
Функции
Функции — основной способ структурировать код.Полезные особенности Python:
clamp(x=5, low=0, high=10))Основные структуры данных
Список, кортеж, словарь, множество
| Структура | Пример | Когда использовать | Аналогия с C++ |
|---|---|---|---|
| list | [1, 2, 3] | изменяемая последовательность | примерно как std::vector |
| tuple | (1, 2) | неизменяемая последовательность | как std::tuple/std::pair |
| dict | { "a": 1 } | ключ → значение | как std::unordered_map |
| set | {1, 2, 3} | уникальные элементы | как std::unordered_set |
Пример со словарём:
Срезы и итерации
Итерация по dict:
Comprehensions (выражения-генераторы коллекций)
Они помогают писать коротко, но их важно не превращать в «головоломки».Модули, пакеты и импорт
.py__init__.py)Пример структуры:
Импорт:
Почему это важно для перехода к C++: при связке языков границы модулей и чистые интерфейсы помогают отделять «быстрый Python» от «тяжёлого C++».
Ошибки и исключения
Исключение — это объект, который описывает ошибку и может быть перехвачен.
Рекомендации:
ValueError), а не просто Exception, если это возможноfinally, когда нужно гарантированно освободить ресурсООП в Python: классы, инкапсуляция, наследование
Класс и объект
self — ссылка на текущий объект__init__ — конструктор (в терминах C++ похож по смыслу, но работает иначе)Инкапсуляция в Python
В Python нет строгих модификаторов доступа как в C++ (private, protected). Вместо этого действует соглашение:_name — «внутреннее» поле (не трогать снаружи без необходимости)__name — name mangling (механизм переименования атрибута внутри класса)Наследование и полиморфизм
Полиморфизм в Python часто строится на принципе duck typing: «если объект ведёт себя как утка, значит это утка». То есть важны методы/интерфейс, а не строгий тип на этапе выполнения.
Типизация в Python: зачем она нужна и как помогает для C++
Python — язык с динамической типизацией: типы проверяются во время выполнения. Но можно (и нужно в больших проектах) добавлять подсказки типов (type hints).
Источник: typing — Support for type hints
Пример:
Что дают подсказки типов:
Для проверки типов часто используют mypy:
Важно: подсказки типов не делают Python статически типизированным сами по себе — это метаданные для инструментов.
dataclass как удобный контейнер данных
dataclass сокращает шаблонный код для классов-структур.Источник: dataclasses — Data Classes
Это похоже на простую struct в C++ по назначению: хранить данные, а не сложную бизнес-логику.
Работа с данными: файлы, пути, JSON, CSV, SQLite
Пути и файловая система через pathlib
pathlib даёт объектный интерфейс для путей.Источник: pathlib — Object-oriented filesystem paths
Текстовые файлы и кодировки
Если вы работаете с русским текстом, почти всегда указывайтеencoding="utf-8" при чтении/записи.with гарантирует закрытие файла, даже если произошла ошибка.
JSON
JSON — самый популярный формат обмена данными между сервисами.Источник: json — JSON encoder and decoder
ensure_ascii=False сохраняет читаемые Unicode-символы.
CSV
CSV часто используют для табличных данных.Источник: csv — CSV File Reading and Writing
SQLite как встроенная база данных
SQLite встроена в стандартную библиотеку и удобна для учебных и небольших проектов.Источник: sqlite3 — DB-API 2.0 interface for SQLite databases
? — параметр запроса, так безопаснее, чем собирать SQL-строку вручную.
Мост к C++: что запомнить уже сейчас
Главное отличие: модель типов и памяти
В C++ типы жёстче и компилятор проверяет их до запуска. В Python тип можно менять, и многие ошибки проявляются только при выполнении. Поэтому в Python-проектах, которые планируют ускорять C++-кодом, особенно полезны:typing)dataclass) для чётких структур данныхКак обычно связывают Python и C++ (мы подробно разберём это позже)
Смысл в том, что Python остаётся «дирижёром», а самые тяжёлые части (например, вычисления) переезжают в C++.
Итог
После этой статьи у вас должны сложиться опоры:dataclass как подготовка к более строгому стилюДальше по курсу мы будем углублять Python (тестирование, архитектура, производительность), а затем перейдём к C++ и практической интеграции Python↔C++.