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
let count = 0;
const limit = 10;
let missing; // undefinedcount = 0
LIMIT = 10 # constant by convention only
missing = NonePython 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
const user = { name: "Ada", age: 36 };
user.email = "ada@example.com";
delete user.age;
console.log("name" in user);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
const doubled = nums
.filter(n => n > 0)
.map(n => n * 2);doubled = [n * 2 for n in nums if n > 0]
square = lambda n: n * nWyraż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
async function loadAll(urls) {
return Promise.all(urls.map(fetchText));
}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
Nonezastępuje zarównonull, jak iundefined. Porównuj przezis 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ęfilterimapw jednej czytelnej linii.Korzystaj z wbudowanych kolekcji
Listy, słowniki, zbiory i krotki pokrywają to, do czego używasz tablic, obiektów,
MapiSet. Użyjin, aby sprawdzić przynależność, alen(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_casezamiastcamelCaseorazand,or,notzamiast&&,||,!.
Twój plan nauki: z JavaScript do Pythona
Przełóż znane pojęcia
Dopasuj znaną składnię i pojęcia do Pythona.
Poznaj różnice w Pythonie
Kolekcje, funkcje, idiomatyczny styl.
Ćwicz na prawdziwym kodzie
Rozwiązuj małe zadania, nie tylko czytaj.
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.
numbers = [1, 2, 3, 4, 5, 6]
even_squares = [n * n for n in numbers if n % 2 == 0]
print(even_squares) # [4, 16, 36]Wyrażenie listowe czyta się od lewej do prawej: oblicz n * n dla każdego n z numbers, zachowując tylko parzyste. Zwykła pętla for z append też zadziała; wyrażenie listowe to idiomatyczny skrót.
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