Я борюсь с функцией timeit в Python, и на более глубоком уровне меня очень расстраивают причуды этой функции. Я надеюсь, что здесь мне помогут с обоими проблемами.
У меня есть сценарий (назовите его my_script.py
) с множеством различных определений функций, а затем множество других вещей, которые вычисляются под ними всеми. В частности, я хочу измерить время только для одной из этих функций - назовем ее level_99_function(x)
. У меня есть большой массив, хранящийся в my_input
. Моя первая попытка:
timeit.timeit('f1(x)', setup = 'my_input')
Python возвращает ошибку: NameError: global name 'angle' is not defined
.
Теперь моя вторая попытка - сделать следующее:
print timeit.timeit('level_99_function(x)', setup = 'import numpy as np; import my_script.py; x= np.linspace(0,100)')
Это не вызывает никаких ошибок, но проблема двоякая. Во-первых, и это наиболее важно, он все еще не синхронизирует level_99_function
(или, может быть, он просто не выводит результат таймера по какой-либо причине?) Во-вторых, оператор import
, похоже, запускает весь скрипт при импорте, что требует навсегда из-за всего того, что у меня есть в этом скрипте, кроме моего level_99_function
.
Как мне узнать время выполнения рассматриваемой функции? А на более философском уровне, почему в Python такая борьба? У меня уже определены переменная и функция; все, что я хочу сделать, это приурочить этот вызов функции к этой переменной. Было бы неплохо, если бы не пришлось писать сверхдлинную строку кода, или писать несколько строк кода, или импортировать что-то или что-то в этом роде. Это так же просто, как tic
и toc
в Matlab. Я предполагаю, что соответствующие команды Python будут использовать time.clock () до и после вызова функции, но я читал, что это может быть неточным и вводящим в заблуждение.
if __name__ == "__main__":
защита всего нефункционального кода в вашем модуле. . - person Kevin   schedule 11.08.2014timeit
не эквивалентноtic...toc
. Если вам нужна функциональностьtic...toc
, сделайте что-нибудь вроде:start = time.clock(); my_function(); print time.clock() - start
- person Joel Cornett   schedule 11.08.2014%timeit
магией для тестирования ваших вещей. Он превосходит ванильtimeit
во многих отношениях. Для остальных вам нужно будет предоставить дополнительный код. Мы можем догадываться, но вы пришли сюда не для этого. - person roippi   schedule 11.08.2014