Przewodnik dla programistów JavaScript

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

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

JavaScript 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.

Zmienne: let, const i undefined

JavaScript
let count = 0;
const limit = 10;
let missing;            // undefined
Python
count = 0
LIMIT = 10              # constant by convention only
missing = None

Python nie ma let ani const: przypisanie tworzy nazwę, a nazwa wielkimi literami to tylko konwencja. Nie ma też undefined: odczyt nigdy nieprzypisanej nazwy zgłasza NameError, brakujący klucz zgłasza KeyError, a None to jawna pusta wartość.

Obiekty i słowniki

JavaScript
const user = { name: "Ada", age: 36 };
user.email = "ada@example.com";
delete user.age;
console.log("name" in user);
Python
user = {"name": "Ada", "age": 36}
user["email"] = "ada@example.com"
del user["age"]
print("name" in user)

Słowniki używają [] z kluczami tekstowymi, a nie notacji z kropką, a user.get("age") zwraca None zamiast zgłaszać KeyError. Słownik przechowuje tylko dane: dla danych z zachowaniem zdefiniuj klasę.

map/filter i wyrażenia listowe

JavaScript
const doubled = nums
  .filter(n => n > 0)
  .map(n => n * 2);
Python
doubled = [n * 2 for n in nums if n > 0]

square = lambda n: n * n

Wyrażenie listowe zastępuje większość łańcuchów filter i map. Python ma też lambda, ale tylko dla jednego wyrażenia, więc dla dłuższego kodu użyj def; składni funkcji strzałkowych nie ma. Wbudowane wersje w Pythonie zwracają leniwe iteratory, a nie listy.

async/await

JavaScript
async function loadAll(urls) {
  return Promise.all(urls.map(fetchText));
}
Python
import asyncio

async def load_all(urls):
    return await asyncio.gather(*(fetch_text(url) for url in urls))

async i await wyglądają podobnie, ale korutyna Pythona nie startuje, dopóki nie zostanie oczekiwana lub zaplanowana, podczas gdy Promise w JavaScripcie zaczyna działać od razu. Python nie daje działającej pętli zdarzeń: uruchom ją przez asyncio.run(...).

Czego programiści JavaScript 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; średniki nie są potrzebne. Używaj czterech spacji i trzymaj się tego konsekwentnie.

  • Prawdziwość i typy działają inaczej

    Puste listy, słowniki i napisy są w Pythonie fałszywe, inaczej niż pusta tablica w JavaScripcie, a None zastępuje zarówno null, jak i undefined. Porównuj przez is None, a nie ==.

  • Wyrażenia listowe zastępują map i filter

    Wyrażenie listowe, takie jak [n * 2 for n in nums if n > 0], wykonuje pracę filter i map w jednej czytelnej linii.

  • Korzystaj z wbudowanych kolekcji

    Listy, słowniki, zbiory i krotki pokrywają to, do czego używasz tablic, obiektów, Map i Set. Użyj in, aby sprawdzić przynależność, a len(items) zamiast .length.

  • Pisz po pythonowemu, a nie w stylu JavaScript

    Pomiń callbacki tam, gdzie pętla lub wyrażenie listowe czyta się lepiej. Używaj snake_case zamiast camelCase oraz and, or, not zamiast &&, ||, !.

Twój plan nauki: z JavaScript 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 JavaScript 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 JavaScript | Naucz się Pythona szybciej – Hintor