Какой код на самом деле использует метод Python timeit() в этом фрагменте кода?

timeit.timeit("A0([randint(1,256) * (-1) ** randint(1,2) for j in range("+str(n)+")])", setup="from HW2 import A0", number=1000000)

Я хочу измерить время, затрачиваемое алгоритмом A0 на выполнение своей работы в списке размера n, но я не могу найти способ сгенерировать список, а затем передать его как переменную в функцию timeit.timeit(.. .) метод. Будет ли таймер измерять только то, сколько времени потребуется для завершения A0, или генерация списка также будет включена в измерение?


person Community    schedule 13.10.2012    source источник


Ответы (2)


Он будет измерять время выполнения всего в выражении (первый аргумент), поэтому, если вы хотите измерить только вызов A0, создание списка исказит результаты.

Попробуйте создать список в настройках:

timeit.timeit("A0(aList)", setup="from HW2 import A0; aList = [randint(1,256) * (-1) ** randint(1,2) for j in range("+str(n)+")] ", number=1000000)

Список будет создан только один раз, в начале таймера, и не будет включен в отсчет времени.

person jdi    schedule 13.10.2012
comment
Так есть ли способ передать этот список как переменную? - person ; 13.10.2012
comment
Я только что показал тебе. Сделайте это в настройках. Он будет доступен в выписке. Или сделайте это переменной, которая поставляется с импортом A0 - person jdi; 13.10.2012
comment
Без проблем. И если вы посмотрите на ipython, у него действительно отличная интеграция с timeit, которая позволяет вам запускать любой оператор на лету с полным доступом к области переменных и функций. - person jdi; 13.10.2012
comment
Не забудьте поставить галочку, если это решило ваш вопрос! - person jdi; 13.10.2012

Время генерации списка будет включено (что бы ни было между кавычками при вызове времени, оно будет).

person kriss    schedule 13.10.2012