Скорость алгоритма нельзя угадать, её нужно измерять. В этой теме мы учимся правильно измерять время в Python и понимать пределы замеров.
Замер через perf_counter
time.perf_counter() — точные монотонные часы: разность двух вызовов даёт секунды. time.time() зависит от системных часов и может «прыгать».
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)499999500000
elapsed is positive: TrueКонкретные секунды мы не печатаем: они каждый раз разные.
Одного замера мало
ОС переключается на другие процессы, кеш пуст, процессор меняет частоту. Один и тот же код может занять 3 мс, а в другой раз 6 мс. Правило: повторяйте замер и берите минимум.
timeit
timeit.timeit(stmt, number=N) выполняет выражение N раз и возвращает суммарное время:
import timeit