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

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

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

JavaScript и Python: бок о бок

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

Переменные: let, const и undefined

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

В Python нет let и const: присваивание создаёт имя, а имя в верхнем регистре — лишь соглашение. Нет и undefined: чтение ни разу не присвоенного имени вызывает NameError, отсутствующий ключ — KeyError, а None — явное пустое значение.

Объекты и словари

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)

Словари используют [] со строковыми ключами, а не доступ через точку, и user.get("age") возвращает None, а не вызывает KeyError. Словарь хранит только данные: для данных с поведением определи класс.

map/filter и генераторы списков

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

Генератор списка заменяет большинство цепочек filter и map. В Python есть и lambda, но она ограничена одним выражением, поэтому для всего более длинного используй def; синтаксиса стрелочных функций нет. Встроенные версии в Python возвращают ленивые итераторы, а не списки.

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 и 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

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

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

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

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

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

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

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

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

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

Мини-задача

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

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

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

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

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

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