Перейти к содержанию
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
Не используйте system Python без venv

На 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

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

Если вы на Windows

Все примеры работают в обычном 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 из 3