2015-03-10 2 views
1

моя проблема заключается в следующем:Не могу понять timeit выход

>>> 999 in list(xrange(1000)) 
True # this takes a glimpse 

Вместо:

>>> import timeit 
>>> timeit.timeit('999 in list(xrange(1000))') 
26.88947892189026 

Почему timeit дает такую ​​высокую производительность?

Спасибо

+0

Посмотрите на подпись 'timeit' называют:' timeit.timeit (STMT = 'проход', установка = 'проход', таймер = <по умолчанию таймер> = номер +1000000) '. По умолчанию он работает 1000000 раз. –

ответ

4

Потому что он делает это 1 миллион раз!
https://docs.python.org/3.4/library/timeit.html#timeit.timeit


timeit.timeit принимает позиционный аргумент number, который по умолчанию 1.000.000 поэтому действительно занимает больше времени, чтобы сделать утверждение 1 миллион раза по сравнению с только один.

Если вы сделаете это 1 раз, это намного быстрее:

In [2]: timeit.timeit('999 in list(xrange(1000))') 
Out[2]: 31.733104944229126 

In [3]: timeit.timeit('999 in list(xrange(1000))', number=1) 
Out[3]: 4.5061111450195312e-05 
+0

В любом случае, мне кажется странным давать такой вариант по умолчанию и не возвращать среднее время прошедшего времени. Когда кто-то делает 'timeit.timeit ('foo()')' ему интересно знать, сколько времени потребуется для выполнения 'foo', а не того, сколько времени потребуется для выполнения' foo' миллион раз, я думаю. Это мнение. – affo

+0

Да, это мнение. Я поделился им, хотя, а также пошел с первого раза, когда использовал его, не читая документы. Но так оно и работает! Пожалуйста, проверьте один ответ, если ваша проблема решена ;-) – d6bels

+0

о, извините. Я сделал это сейчас – affo

0
timeit.timeit(stmt='pass', setup='pass', timer=<default timer>, number=1000000) 

Глупый вопрос, номер по умолчанию, раз выполняется утверждение один миллион ... я должен был прочитать timeit документ перед ...

>>> timeit.timeit('999 in list(xrange(1000))', number=1) 
9.083747863769531e-05 
+0

'number = 1' создает ненадежные тайминги. Вы можете использовать интерфейс командной строки: «python -mtimeit» 999 in xrange (1000) »или разделить результат на количество повторений и взять минимум из нескольких измерений (функция' repeat() '). – jfs

Смежные вопросы