Найти в Дзене
Машинное обучение

⏱ Измерение времени выполнения кода

Часто на форумах и чатах возникают горячие споры о том, какой же вариант кода из нескольких выполняется быстрее. К счастью, в Python есть модуль timeit, который позволяет быстро замерить и сравнить производительность кода.

📎 Пример: определим, какой вариант кода быстрее:

>>> import timeit

>>> timeit.timeit('"-".join(str(n) for n in range(100))', number=10000)

0.23387694358825684

>>> timeit.timeit('"-".join([str(n) for n in range(100)])', number=10000)

0.20793890953063965

>>> timeit.timeit('"-".join(map(str, range(100)))', number=10000)

0.2012779712677002

Оказалось, что третий.

Если в тестируемом кусочке кода вам потребуется обратиться к переменным или модулям из глобальной зоны видимости, то удобно воспользоваться параметром globals и присвоить его результаты функции globals()

>>> import math

>>> my_const = 6.28

>>> timeit.timeit('math.cos(my_const)', globals=globals())

0.12635547306854278

Можно также передавать в timeit имя функции (без параметров):

>>> import timeit

>>> def foo(): "-".join(map(str, range(1000)))

...

>>> timeit.timeit(foo, number=1000)

📎 timeit можно вызвать из терминала:

python -m timeit -s "from math import sqrt" -n 10000 "x = sqrt(25)"

После ключа -s идет строка инициализации; она выполнится единожды. Ключ -n установит число итераций теста (рекомендуется не меньше 1000).

⚠️ Помните, что результаты тестов могут отличаться в зависимости от вашего компьютера, ОС, версии Python, фаз луны и много еще чего. Также советуем вам не увлекаться чрезмерной оптимизацией во вред читаемости кода.

Желаем вам продуктивного программирования!

Python RU

#machinelearning #artificialintelligence #ai #datascience #python #programming #technology #deeplearning #coding #bigdata