Скорость алгоритма нельзя угадать, её нужно измерять. В этой теме мы учимся правильно измерять время в Python и понимать пределы замеров.

Замер через perf_counter

time.perf_counter() — точные монотонные часы: разность двух вызовов даёт секунды. time.time() зависит от системных часов и может «прыгать».

python
import time

start = time.perf_counter()
total = sum(range(1_000_000))
elapsed = time.perf_counter() - start

print(total)
print("elapsed is positive:", elapsed > 0)
text
499999500000
elapsed is positive: True

Конкретные секунды мы не печатаем: они каждый раз разные.

Одного замера мало

ОС переключается на другие процессы, кеш пуст, процессор меняет частоту. Один и тот же код может занять 3 мс, а в другой раз 6 мс. Правило: повторяйте замер и берите минимум.

Повторы и минимум
Повторы и минимум

timeit

timeit.timeit(stmt, number=N) выполняет выражение N раз и возвращает суммарное время:

python
import timeit