Гайд для JavaScript-разработчиков
Python для JavaScript-разработчиков: осваивай Python на основе того, что уже знаешь
Уже знаешь JavaScript? Узнай, как знакомые концепции программирования выглядят в Python, что работает иначе и как быстрее всего начать писать продуктивно.
JavaScript и Python: бок о бок
Каждая пара ниже решает одну и ту же задачу. Начни со знакомого кода и посмотри, как то же самое выражается в Python.
Переменные: let, const и undefined
let count = 0;
const limit = 10;
let missing; // undefinedcount = 0
LIMIT = 10 # constant by convention only
missing = NoneВ Python нет let и const: присваивание создаёт имя, а имя в верхнем регистре — лишь соглашение. Нет и undefined: чтение ни разу не присвоенного имени вызывает NameError, отсутствующий ключ — KeyError, а None — явное пустое значение.
Объекты и словари
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)Словари используют [] со строковыми ключами, а не доступ через точку, и user.get("age") возвращает None, а не вызывает KeyError. Словарь хранит только данные: для данных с поведением определи класс.
map/filter и генераторы списков
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 * nГенератор списка заменяет большинство цепочек filter и map. В Python есть и lambda, но она ограничена одним выражением, поэтому для всего более длинного используй def; синтаксиса стрелочных функций нет. Встроенные версии в Python возвращают ленивые итераторы, а не списки.
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 и await выглядят похоже, но корутина Python не запускается, пока её не ожидают или не запланируют, а Promise в JavaScript начинает выполняться сразу. В Python нет уже запущенного цикла событий: запусти его через asyncio.run(...).
От чего JavaScript-разработчику стоит отучиться
Некоторые привычки плохо переносятся. Вот самые важные сдвиги.
Отступы — это синтаксис
Блок начинается с двоеточия и задаётся отступами, а не фигурными скобками; точки с запятой не нужны. Используй четыре пробела и будь последователен.
Истинность и типы устроены иначе
Пустые списки, словари и строки в Python считаются ложными, в отличие от пустого массива в JavaScript, а
Noneзаменяет иnull, иundefined. Сравнивай черезis None, а не через==.Генераторы списков заменяют map и filter
Генератор списка вроде
[n * 2 for n in nums if n > 0]выполняет работуfilterиmapв одной читаемой строке.Опирайся на встроенные коллекции
Списки, словари, множества и кортежи покрывают то, для чего ты используешь массивы, объекты,
MapиSet. Проверяй принадлежность черезin, а вместо.lengthиспользуйlen(items).Пиши на Python, а не на JavaScript внутри Python
Обходись без колбэков там, где цикл или генератор списка читается лучше. Пиши имена в
snake_case, а не вcamelCase, и используйand,or,notвместо&&,||,!.
Твой план перехода с JavaScript на Python
Переведи знакомые концепции
Сопоставь знакомый синтаксис и концепции с Python.
Изучи отличия Python
Коллекции, функции, идиоматичный стиль.
Практикуйся на реальном коде
Решай небольшие задачи, а не только читай.
Обрети уверенность
Более сложные и реалистичные задачи.
Трек Hintor «Python для разработчиков» рассчитан на тех, кто переходит на другой язык, а практические задания встроены прямо в уроки. Посмотреть трек «Python для разработчиков»
Мини-задача
Дан список целых чисел. Напиши код на Python, который создаёт новый список из квадратов только чётных чисел.
- Вход
- [1, 2, 3, 4, 5, 6]
- Ожидаемый результат
- [4, 16, 36]
Подсказка: в генератор списка можно добавить фильтр if, а выражение n % 2 == 0 проверяет, чётное ли число n.
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]Генератор списка читается слева направо: вычислить n * n для каждого n из numbers, оставив только чётные. Обычный цикл for с append тоже подойдёт; генератор списка — идиоматичное сокращение.
Готов превратить знания JavaScript в навыки Python?
Ты уже умеешь программировать. Теперь научись думать на Python с помощью пошаговых уроков и практики.
Начать учить Python на Hintor