Как измерить время выполнения метода с помощью timeit Python?

Есть метод поиска подстроки в строке и нужно измерить время выполнения этого метода. Сейчас я измеряю так:

timeit.timeit('method(pattern, text)','from xxx import method', 'from __main__ import pattern')

Но это не работает - выходит ошибка "TypeError: 'str' object cannot be interpreted as an integer". Как исправить ошибку и как сделать так, чтобы я мог вместо text мог использовать i-ый элемент массива?

timeit.timeit('method(pattern, text[i])', ...)

Ответы (1 шт):

Автор решения: Pak Uula

timeit по умолчанию выполняется в отдельном пространстве имён. Если вам нужно, чтобы в выражении использовались глобальные переменные, нужно задать параметр globals:

text=["a","b", "c"]
i=2
timeit.timeit("len(text[i])", globals=globals())

Если globals не задавать, будет ошибка NameError: name 'text' is not defined

Функция timeit возвращает суммарное время выполнения. Для того, чтобы узнать среднее время выполнения одной итерации, нужно разделить возвращаемое значение на число повторений:

text=["a","b", "c"]
i=2
n = 10000
timeit.timeit("len(text[i])", globals=globals(), number=n)/n

Результат 8.309150000013688e-08

→ Ссылка