Гайд для C++-разработчиков

Python для C++-разработчиков: осваивай Python на основе того, что уже знаешь

Уже знаешь C++? Узнай, как знакомые концепции программирования выглядят в Python, что работает иначе и как быстрее всего начать писать продуктивно.

C++ и Python: бок о бок

Каждая пара ниже решает одну и ту же задачу. Начни со знакомого кода и посмотри, как то же самое выражается в Python.

Статическая и динамическая типизация

C++
int count = 3;
count = "three";   // compile error

std::string name = "Ada";
Python
count = 3
count = "three"    # allowed

name: str = "Ada"

C++ фиксирует тип каждой переменной при компиляции. В Python имя можно связать со значением любого типа, а типы проверяются только при выполнении строки. Аннотации вроде name: str читают инструменты, например mypy, но во время выполнения они не проверяются, а целые числа не переполняются.

Память, указатели и ссылки

C++
int value = 10;
int* ptr = &value;
*ptr = 20;

void bump(int& n) { n += 1; }
Python
a = [1, 2]
b = a
b.append(3)
print(a)  # [1, 2, 3]

В Python нет указателей и ручного управления памятью: каждое имя — ссылка на объект, а объекты освобождаются, когда на них больше ничто не ссылается. b = a копирует ссылку, а не список. Целые числа и строки неизменяемы, поэтому n += 1 внутри функции привязывает локальное имя заново, а не меняет значение у вызывающего кода.

std::vector и списки

C++
std::vector<int> nums = {1, 2, 3};
nums.push_back(4);
// holds only ints, stored side by side
Python
nums = [1, 2, 3]
nums.append(4)
mixed = [1, "two", 3.0]

std::vector хранит значения одного типа подряд в памяти. Список Python хранит ссылки на объекты, поэтому может смешивать типы: это гибко, но тяжелее и медленнее для больших объёмов числовых данных. Для компактного хранения чисел используй модуль array или NumPy.

Циклы и алгоритмы STL

C++
std::vector<int> evens;
for (int n : nums) {
    if (n % 2 == 0) evens.push_back(n);
}
int total = std::accumulate(nums.begin(), nums.end(), 0);
std::sort(nums.begin(), nums.end());
Python
evens = [n for n in nums if n % 2 == 0]
total = sum(nums)
nums.sort()

Большинство алгоритмов STL превращаются в генераторы списков или встроенные функции вроде sum, min, max, any и all, а передаёшь ты саму коллекцию, а не пару итераторов. nums.sort() сортирует на месте, а sorted(nums) возвращает новый список.

От чего C++-разработчику стоит отучиться

Некоторые привычки плохо переносятся. Вот самые важные сдвиги.

  • Отступы — это синтаксис

    Блок начинается с двоеточия и задаётся отступами, а не фигурными скобками. Используй четыре пробела и будь последователен.

  • Типы проверяются во время выполнения

    Динамическая типизация означает, что имя может ссылаться на любое значение, а ошибки типов проявляются при выполнении строки. Необязательные аннотации типов и проверка с помощью mypy возвращают часть безопасности C++.

  • Перебирай элементы, а не индексы

    Проходи по самой коллекции. Прежде чем писать range(len(items)), подумай о enumerate или zip.

  • Опирайся на встроенные коллекции

    Списки, словари, множества и кортежи покрывают большую часть того, что ты импортируешь из STL. Генератор списка вроде [len(w) for w in words] заменяет простой цикл, который наполняет список; добавь if в конце, чтобы отфильтровать элементы.

  • Никакого ручного управления памятью

    Не нужно управлять указателями и освобождать память, нет разделения на заголовок и реализацию и нет секции private:: Python сам убирает объекты. Используй with там, где ты полагался бы на RAII, а имена пиши в snake_case.

Твой план перехода с C++ на Python

  1. Переведи знакомые концепции

    Сопоставь знакомый синтаксис и концепции с Python.

  2. Изучи отличия Python

    Коллекции, функции, идиоматичный стиль.

  3. Практикуйся на реальном коде

    Решай небольшие задачи, а не только читай.

  4. Обрети уверенность

    Более сложные и реалистичные задачи.

Трек Hintor «Python для разработчиков» рассчитан на тех, кто переходит на другой язык, а практические задания встроены прямо в уроки. Посмотреть трек «Python для разработчиков»

Мини-задача

Дан список целых чисел. Напиши код на Python, который создаёт новый список из квадратов только чётных чисел.

Вход
[1, 2, 3, 4, 5, 6]
Ожидаемый результат
[4, 16, 36]

Подсказка: в генератор списка можно добавить фильтр if, а выражение n % 2 == 0 проверяет, чётное ли число n.

Готов превратить знания C++ в навыки Python?

Ты уже умеешь программировать. Теперь научись думать на Python с помощью пошаговых уроков и практики.

Начать учить Python на Hintor
Python для C++-разработчиков | Быстро освой Python – Hintor