Сравнение эффективности функций в Python с timeit
Быстрый ответ
Для вычисления времени исполнения кода в Python можно использовать timeit.timeit(). Код передается в виде строки, а число его итераций задается через параметр number:
import timeit
execution_time = timeit.timeit('sum(range(100))', number=1000)
print(execution_time)
В данном примере мы измеряем время исполнения выражения sum(range(100)), выполняемого 1000 раз. Чтобы повысить точность измерения, увеличьте значение number.

Точное измерение времени функций
Для тестирования отдельных функций напрямую вы можете использовать timeit.Timer(). Для устранения нежелательного влияния процесса измерения на результат рекомендуется применять функцию functools.partial:
from timeit import Timer
from functools import partial
def my_function():
# Здесь будет ваш впечатляющий код
pass
# Пора проверить нашу функцию!
timed_run = Timer(partial(my_function)).timeit(number=10000)
print(timed_run)
В этом случае использование partial помогает уменьшить лишние временные затраты, связанные с процессом измерения.
Подготовка условий с помощью setup
С помощью setup можно задать начальные условия и исключить влияние внешних факторов на результаты измерения. Это особенно полезно при тестировании "на месте" сортировки:
import timeit
setup_code = """
import random
my_list = list(range(100))
random.shuffle(my_list)
"""
test_code = """
sorted(my_list)
"""
# Данные будут каждый раз перемешиваться перед началом испытания
times = timeit.repeat(stmt=test_code, setup=setup_code, repeat=5, number=1000)
print(min(times)) # Выбираем наилучший результат из всех попыток
Визуализация
Можно рассматривать timeit как персональный секундомер (⏱) для коротких забегов, где различные участки кода соревнуются в скорости выполнения.
| Имя спринтера | ⏱ Время |
|---|---|
| A (Цикл for) | ⌚ 0.3с |
| B (Списковое включение) | ⌚ 0.1с |
| C (Функция map) | ⌚ 0.2с |
Модуль timeit фиксирует время, необходимое каждому "спринтеру" для завершения дистанции, определяя победителя.
import timeit
best_time = timeit.timeit("test_code", number=1000)
🏁 Готовы, старт, марш! Кому удастся прийти к финишу первым?
Работа с IPython и интеграция с командной строкой
В среде IPython использовать %timeit становится проще:
%timeit sum(range(100))
В командной строке применяйте -m timeit:
python -m timeit -s "import random" "random.shuffle(list(range(100)))"
Флаг -s применяется для инициализации начальных условий, обеспечивая тем самым консистентность тестирования.
Сравнение производительности функций
Можно сравнить производительность различных подходов. Это похоже на конкурс эффективности кода, где под "эффективностью" понимается быстродействие:
import timeit
def using_list_comprehension():
return [i for i in range(100)]
def using_map_function():
return map(lambda i: i, range(100))
def using_for_loop():
result = []
for i in range(100):
result.append(i)
return result
# Начинаем состязание!
times = {
'Списковое Включение': timeit.timeit(using_list_comprehension, number=10000),
'Функция Map': timeit.timeit(using_map_function, number=10000),
'Цикл For': timeit.timeit(using_for_loop, number=10000),
}
# Оценим время, за которое они завершили исполнение!
print(sorted(times.items(), key=lambda x: x[1]))
Исследуйте глубже
Для более продвинутого анализа производительности:
- Запускайте тесты несколько раз с помощью
timeit.repeatи фокусируйтесь на самом коротком времени выполнения. - Перемешивайте данные между тестами, чтобы исключить искажение результатов.
- Изучите, как стандартная библиотека Python и алгоритм сортировки Timsort работают с частично упорядоченными данными.
- Ознакомьтесь поближе с документацией, чтобы лучше понять
timeit.
Полезные материалы
- timeit — Измерение времени выполнения маленьких кусков кода — Документация Python 3.12.1 — официальная документация модуля
timeit. - Функции таймера в Python: три способа мониторинга вашего кода – Real Python — в статье приводятся практические примеры и альтернативные методы для измерения времени.
- timeit — Измерьте время выполнения маленьких кусков кода на Python. — PyMOTW 3 — исчерпывающее руководство с дополнительными примерами и объяснениями.
- Работа с библиотекой Python Timeit с примером – Python Pool — подробное объяснение функций
repeat,timeitиdefault_timerна примерах. - Учебник Python: Вызов внешних команд с помощью модуля Subprocess – YouTube — обучающее видео о Python от проверенного источника, несмотря на то, что оно не сфокусировано на
timeit.


