Python timeit(): измерение времени выполнения с практическими примерами
Что такое Python timeit()?
Python timeit() — встроенный модуль для измерения времени выполнения небольших фрагментов кода с высокой точностью. По умолчанию он запускает инструкцию один миллион раз и сообщает о самом быстром запуске, что помогает сравнивать производительность разных реализаций.
Синтаксис
timeit.timeit(stmt, setup, timer, number)
Параметры
- stmt — код для замера. По умолчанию
pass. - setup — код, выполняемый один раз перед
stmt. По умолчаниюpass. - timer — опциональная функция таймера. Модуль предоставляет подходящий по умолчанию.
- number — сколько раз выполнять
stmt. По умолчанию 1 000 000.
Сначала импортируйте модуль:
import timeit
Пример 1 — Замер простого выражения
# Тест базовой арифметической операции
import timeit
print(timeit.timeit("output = 10*5"))
Типичный вывод:
0.06127880399999999
Это показывает время (в секундах), затраченное на самый быстрый из миллиона запусков.
Замер многострочного кода
timeit может обрабатывать многострочный код, разделяя инструкции точками с запятой или передавая тройную кавычку.
Использование точек с запятой
import timeit
print("The time taken is ", timeit.timeit(stmt="a=10;b=10;sum=a+b"))
Вывод:
The time taken is 0.137031482
Использование тройных кавычек
import timeit
import_module = "import random"
testcode = '''
def test():
return random.randint(10, 100)
'''
print(timeit.repeat(stmt=testcode, setup=import_module))
Вывод:
C:\pythontest>python testtimeit.py The time taken is 0.182619178
Ключевые методы
- timeit.default_timer() — возвращает текущее время с наилучшим доступным разрешением.
- timeit.repeat(stmt, setup, timer, repeat, number) — запускает
timeit()повторно, возвращая список лучших времен для каждого запуска.
Пример 1 — Использование timeit.timeit()
# Тест функции, возвращающей случайное целое
import timeit
import_module = "import random"
testcode = '''
def test():
return random.randint(10, 100)
'''
print(timeit.timeit(stmt=testcode, setup=import_module))
Вывод:
0.46715912400000004
Пример 2 — Использование default_timer()
# Замер одного вызова функции
import timeit
import random
def test():
return random.randint(10, 100)
starttime = timeit.default_timer()
print("The start time is :", starttime)
test()
print("The time difference is :", timeit.default_timer() - starttime)
Вывод:
The start time is : 0.220261875 The time difference is : 0.0004737320000000045
Пример 3 — Использование timeit.repeat()
# Запуск теста пять раз и захват лучших времен
import timeit
import_module = "import random"
testcode = '''
def test():
return random.randint(10, 100)
'''
print(timeit.repeat(stmt=testcode, setup=import_module, repeat=5))
Вывод:
[0.43638873, 0.5040939680000001, 0.5069179909999999, 0.3943449330000002, 0.3546886979999999]
Каждая запись — лучшее время для одной итерации из 1 000 000 запусков.
Использование из командной строки
Можно вызвать timeit прямо из оболочки:
python -m timeit [-n N] [-r N] [-s S] [-t] [-c] [-h] [code statement ...]
-n N— число циклов для инструкции.-r N— сколько раз повторять весь процесс замера.-s S— код настройки, выполняемый один раз перед замером.-t— использоватьtime.time()как таймер.-c— использоватьtime.clock()как таймер.-h— показать справку.
Пример
C:\pythontest>python -m timeit -s 'text="hello world"' 20000000 loops, best of 5: 13.1 nsec per loop
Другой удобный способ — вызвать timeit из REPL:
import timeit
print("The time taken is ", timeit.timeit(stmt="a=10;b=10;sum=a+b"))
Вывод:
The time taken is 0.15048536300000137
Почему timeit() — лучший инструмент для замера Python-кода
- Он запускает инструкцию много раз (по умолчанию 1 000 000) и возвращает самый быстрый запуск, давая надёжную оценку.
- Сборка мусора отключена во время замера, предотвращая искажение результатов.
- Он автоматически выбирает самый точный таймер для вашей ОС (например,
time.clock()на Windows,time.time()на macOS/Linux).
Резюме
Модуль timeit необходим для бенчмаркинга коротких Python-фрагментов. Его параметры просты:
- stmt — код для замера.
- setup — разовый код настройки.
- timer — опциональная функция таймера.
- number — сколько раз запускать
stmt.
Обязательно используйте timeit для точных, воспроизводимых измерений.
Python
- Python: получение текущего времени и работы с часовыми поясами
- Освоение модуля time в Python: функции, структуры и практические примеры
- Мастерство метода str.count() в Python: как подсчитывать символы и подстроки с примерами
- Мастерство строк форматирования format() в Python: понятные примеры
- Мастерство метода String.find() в Python: синтаксис, примеры и альтернативы
- Освоение лямбда-функций Python: практические примеры и лучшие практики
- Функция round() в Python: подробное объяснение с практическими примерами
- Освоение функции map() в Python: синтаксис, примеры и лучшие практики
- Counter в collections Python: эффективное подсчёт, обновление и арифметические операции
- Понимание type() и isinstance() в Python: практические примеры