Learning Platform
Глоссарий Troubleshooting
Урок 01.02 · 18 мин
Начальный
PrerequisitesPython setupTerminal basics

Что вы должны уметь к старту

Курс — про структуры данных и алгоритмы, а не про Python с нуля. Поэтому минимальный навык владения языком обязателен. Если что-то из списка вам незнакомо — лучше сначала пройти Python 01 или эквивалент.

Чек-лист предварительных знаний

Если все пункты понятны — можно начинать. Если нет — сначала Python 01.

[x] Переменные и типыint, float, str, bool, NoneЗнаете, что в Python переменные — это имена, указывающие на объекты. Понимаете immutable vs mutable.
[x] Управляющие конструкцииif/elif/else, for, while, break, continueУмеете писать циклы и ветвления, понимаете, как работает range().
[x] Функцииdef, return, аргументы, *args, **kwargsМожете написать функцию с параметрами, дефолтными значениями, понимаете области видимости.
[x] Базовые коллекцииlist, dict, set, tupleЗнаете API: append, pop, index, get, items, in. Различаете set от dict, tuple от list.
[x] Comprehensions[x*2 for x in lst if x > 0]Читаете list/dict/set comprehensions. Не обязательно писать сложные, но понимать на чтение — да.
[x] Импортыimport, from ... import ...Умеете подключать стандартную библиотеку: random, math, time, sys, collections.
[x] Терминалcd, ls, python file.pyМожете запустить Python-скрипт из командной строки, переходить по каталогам.

Если 5+ пунктов вызывают вопрос — стоп. Не теряйте время на этот курс, сначала разберитесь с Python. Эффективнее.

Переменные, типы и выражения Python Управляющие конструкции Python

Что не нужно знать

Чтобы не пугаться — вот чего не требуется:

  • ООП и классы — мы пишем мало классов, в основном функции и встроенные структуры. Когда понадобится, объясним.
  • Декораторы, генераторы, async — затронем по минимуму там, где нужно (timeit, итераторы). Если знаете — здорово, нет — не страшно.
  • Numpy/pandas — нет, мы делаем замеры на чистом Python. Numpy появится в одном-двух уроках для воспроизведения branch prediction.
  • Любой матан — нет. Big-O — это «верхняя граница на скорости роста», без формального epsilon-delta. Если умеете считать, сколько раз будет выполнен вложенный цикл, всё ок.
  • Алгоритмическая олимпиадная подготовка — наоборот, мы про практику, не про «найдите k-ю минимальную подматрицу за O(n log n)».

Установка Python 3.13

Курс рассчитан на Python 3.13. Это важно: некоторые числа измерений зависят от версии (например, dict layout менялся в 3.6, free-threading появился в 3.13). Если у вас 3.11 или 3.12 — на 90% уроков разницы не будет, но мы рекомендуем именно 3.13.

uv в глубину: менеджер Python-окружений

Способ 1: uv (рекомендуем)

uv — современный менеджер от Astral. Один бинарь заменяет pyenv + pip + virtualenv. Установка:

# macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh

# Windows (PowerShell)
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

Дальше:

# Установите Python 3.13
uv python install 3.13

# Создайте проект для этого курса
mkdir dsa-course && cd dsa-course
uv init --python 3.13
uv add ipython rich  # для удобного REPL и красивого вывода

# Запускайте всё через uv run
uv run python --version
# Python 3.13.x

Способ 2: системный Python (если не хотите uv)

# macOS через homebrew
brew install [email protected]

# Ubuntu/Debian
sudo apt install python3.13 python3.13-venv

# Windows — официальный installer с python.org

Дальше создайте virtual environment:

python3.13 -m venv .venv
source .venv/bin/activate  # macOS/Linux
# .venv\Scripts\activate     # Windows
pip install ipython rich
WARNING

На macOS системный Python зарезервирован для самой ОС. На Linux часто стоит несколько версий. Всегда работайте в venv или через uv — это избавит от 90% «у меня не запускается».

Проверка установки

Создайте файл check.py:

import sys
import platform

print(f"Python: {sys.version}")
print(f"Implementation: {platform.python_implementation()}")
print(f"Machine: {platform.machine()}")

# Простейший бенчмарк — должен пройти за секунды
import timeit
t = timeit.timeit('sum(range(1_000_000))', number=10)
print(f"sum(range(1M)) x10: {t:.3f}s")

Запустите:

python check.py
# или: uv run python check.py

Ожидаемый вывод (числа будут разные):

Python: 3.13.0 (...)
Implementation: CPython
Machine: arm64
sum(range(1M)) x10: 0.23s

Если всё работает — поздравляем, готовы.

Что вам понадобится для каждого урока

Это базовый toolkit на весь курс. Ничего экзотического.

Python 3.13CPython стандартныйЧерез uv или системную установку. PyPy не подойдёт — у него другие константы скорости.
Терминалbash / zsh / PowerShellЛюбой современный shell. Все примеры командной строки даём на bash-синтаксисе.
Текстовый редакторVS Code / PyCharm / vimЛюбой, в котором умеете запускать python file.py. Pylance в VS Code — отличный выбор.
timeit (stdlib)встроенГлавный инструмент измерений. Не нужно ставить.
tracemalloc (stdlib)встроенИзмерение памяти, выделяемой Python-объектами.
pympler (опц.)pip install pymplerasizeof — рекурсивное измерение размера объекта со всеми ссылками. Появится в модуле 3.

Терминал-минимум

Если вы редко работаете в командной строке — освойте эти команды до начала курса:

# Навигация
pwd                  # где я сейчас
cd path/to/dir       # перейти в каталог
cd ..                # на уровень выше
ls -la               # список файлов

# Файлы
touch file.py        # создать пустой файл
mkdir new_dir        # создать каталог
rm file.py           # удалить файл

# Запуск Python
python script.py     # запустить скрипт
python -c "print(1)" # выполнить inline
python -m timeit ... # запустить модуль stdlib

Этого достаточно для всего курса. Сложного не будет.

NOTE

Все примеры работают в обычном cmd или PowerShell. Если хотите bash-окружение — используйте WSL2 (Windows Subsystem for Linux). Это сэкономит много нервов на путях с обратными слешами и кодировках.

Что делать прямо сейчас

  1. Поставьте Python 3.13 через uv (или venv).
  2. Запустите check.py из этого урока — убедитесь, что всё работает.
  3. Заведите рабочий каталог для курса, например ~/projects/dsa-course/. В нём будут лежать все скрипты-замеры.
  4. Открыйте редактор, в котором вам удобно — VS Code, PyCharm, vim, что угодно.

Если все четыре шага сделаны — переходите к следующему уроку про как учиться. Иначе застрянете.

Проверка знанийKnowledge check
Почему мы рекомендуем именно Python 3.13, хотя на большинстве уроков разницы с 3.11/3.12 нет?
ОтветAnswer
Некоторые детали внутреннего устройства структур данных зависят от версии CPython. Например, dict layout перешёл на compact representation в 3.6, free-threaded mode появился в 3.13. Числа измерений (timeit, sys.getsizeof) могут отличаться между версиями. Чтобы наши примеры воспроизводились байт-в-байт, фиксируем версию. На 3.11/3.12 курс тоже работает — просто можем получить чуть другие числа.

Проверьте понимание

Результат: 0 из 0
Прикладной
Вопрос 1 из 3. Схема данных: `fact_orders(order_id, customer_id, product_id, amount, order_date)` и `dim_products(product_id, name, category)`. Напишите запрос, который вернёт суммарную выручку (SUM(amount)) по категориям продуктов за последние 30 дней, отсортированную по убыванию выручки.

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс

Войдите чтобы оценить урок

Прогресс модуля
0 из 3