Przewodnik dla programistów C++

Python dla programistów C++: ucz się Pythona na tym, co już wiesz

Znasz już C++? Zobacz, jak znane pojęcia programistyczne przekładają się na Pythona, co działa inaczej i jaka jest najszybsza droga do produktywności.

C++ i Python obok siebie

Każda para poniżej wykonuje to samo zadanie. Zacznij od znanego kodu, a potem zobacz, jak wyraża go Python.

Typowanie statyczne i dynamiczne

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

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

name: str = "Ada"

C++ ustala typ każdej zmiennej w czasie kompilacji. W Pythonie nazwę można związać z wartością dowolnego typu, a typy są sprawdzane dopiero przy wykonaniu linii. Adnotacje takie jak name: str czytają narzędzia, np. mypy, ale w czasie działania nie są wymuszane, a liczby całkowite nigdy się nie przepełniają.

Pamięć, wskaźniki i referencje

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 nie ma wskaźników ani ręcznego zarządzania pamięcią: każda nazwa to referencja do obiektu, a obiekty są zwalniane, gdy nic się już do nich nie odwołuje. b = a kopiuje referencję, a nie listę. Liczby całkowite i napisy są niezmienne, więc n += 1 w funkcji wiąże lokalną nazwę na nowo, zamiast zmieniać wartość u wywołującego.

std::vector i listy

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 przechowuje wartości jednego typu obok siebie w pamięci. Lista Pythona przechowuje referencje do obiektów, więc może mieszać typy, co jest elastyczne, ale cięższe i wolniejsze przy dużych ilościach danych liczbowych. Do zwartego przechowywania liczb użyj modułu array lub NumPy.

Pętle i algorytmy 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()

Większość algorytmów STL zamienia się w wyrażenia listowe lub funkcje wbudowane, takie jak sum, min, max, any i all, a przekazujesz samą kolekcję zamiast pary iteratorów. nums.sort() sortuje w miejscu, a sorted(nums) zwraca nową listę.

Czego programiści C++ powinni się oduczyć

Niektóre nawyki źle się przenoszą. Te zmiany liczą się najbardziej.

  • Wcięcia są składnią

    Bloki zaczynają się dwukropkiem i są wyznaczane wcięciami, a nie nawiasami klamrowymi. Używaj czterech spacji i trzymaj się tego konsekwentnie.

  • Typy sprawdzane są w trakcie działania

    Typowanie dynamiczne oznacza, że nazwa może wskazywać dowolną wartość, a błędy typów ujawniają się dopiero przy wykonaniu linii. Opcjonalne adnotacje typów i narzędzie takie jak mypy przywracają część bezpieczeństwa znanego z C++.

  • Iteruj po elementach, nie po indeksach

    Przechodź po samej kolekcji. Zanim napiszesz range(len(items)), sięgnij po enumerate lub zip.

  • Korzystaj z wbudowanych kolekcji

    Listy, słowniki, zbiory i krotki pokrywają większość tego, co importujesz z biblioteki STL. Wyrażenie listowe, takie jak [len(w) for w in words], zastępuje prostą pętlę budującą listę; dodaj na końcu if, aby filtrować.

  • Brak ręcznego zarządzania pamięcią

    Nie zarządzasz wskaźnikami ani nie zwalniasz pamięci, nie ma podziału na nagłówek i implementację ani sekcji private:: Python sprząta obiekty za ciebie. Używaj with tam, gdzie polegałbyś na RAII, a nazwy zapisuj w snake_case.

Twój plan nauki: z C++ do Pythona

  1. Przełóż znane pojęcia

    Dopasuj znaną składnię i pojęcia do Pythona.

  2. Poznaj różnice w Pythonie

    Kolekcje, funkcje, idiomatyczny styl.

  3. Ćwicz na prawdziwym kodzie

    Rozwiązuj małe zadania, nie tylko czytaj.

  4. Zdobądź pewność siebie

    Trudniejsze, bardziej realistyczne wyzwania.

Ścieżka Python dla programistów w Hintor jest przeznaczona dla osób, które zmieniają język programowania, a praktyczne ćwiczenia są częścią lekcji. Zobacz ścieżkę Python dla programistów

Mini wyzwanie

Dla listy liczb całkowitych napisz kod w Pythonie, który utworzy nową listę zawierającą kwadraty wyłącznie liczb parzystych.

Dane wejściowe
[1, 2, 3, 4, 5, 6]
Oczekiwany wynik
[4, 16, 36]

Podpowiedź: wyrażenie listowe może zawierać filtr if, a n % 2 == 0 sprawdza, czy n jest parzyste.

Gotowy, by zamienić wiedzę o C++ w umiejętności Pythona?

Już umiesz programować. Teraz naucz się myśleć w Pythonie dzięki prowadzonym lekcjom i praktyce.

Zacznij naukę Pythona w Hintor
Python dla programistów C++ | Naucz się Pythona szybciej – Hintor