python: медленная функция timeit () - PullRequest
16 голосов
/ 11 августа 2009

Когда я запускаю приведенный ниже код вне timeit (), он, кажется, завершается мгновенно. Однако когда я запускаю его в функции timeit (), это занимает гораздо больше времени. Почему?

>>> import timeit
>>> t = timeit.Timer("3**4**5")
>>> t.timeit()
16.55522028637718

Использование: Python 3.1 (x86) - AMD Athlon 64 X2 - WinXP (32 бита)

Ответы [ 4 ]

29 голосов
/ 11 августа 2009

Функция timeit() запускает код много раз (по умолчанию один миллион) и занимает среднее время.

Чтобы запустить код только один раз, сделайте следующее:

t.timeit(1)

но это даст вам искаженные результаты - это повторяется не зря.

Чтобы получить время на цикл, повторяя его, разделите результат на количество циклов. Используйте меньшее значение для числа повторений, если миллион слишком много:

count = 1000
print t.timeit(count) / count
6 голосов
/ 11 августа 2009

Потому что по умолчанию timeit запускается миллион раз. Задача состоит в том, чтобы выполнить микротесты, и единственный способ получить точные значения времени коротких событий - это повторять их много раз.

3 голосов
/ 11 августа 2009

Согласно документам , Timer.timeit () запускает ваш код по умолчанию миллион раз. Используйте параметр «число», чтобы изменить это значение по умолчанию:

t.timeit(number=100)

например.

2 голосов
/ 11 августа 2009

Timeit по умолчанию выполняется для одного миллиона циклов.

У вас также могут возникнуть проблемы с порядком операций: (3**4)**5 != 3**4**5.

...