import timeit timeit.timeit(stmt='pass', setup='pass', \ timer=<default timer>, \ number=1000000, globals=None)
stmt='pass'
- проверяемый код,setup='pass'
- настройка кода,timer=<default timer>
- используемый таймер,number=1000000
- число циклов измерений,globals=None
- область видимости.float
время выполнения кода в цикле number
раз.Функция timeit()
модуля timeit
возвращает время, необходимое для выполнения основного выражения number
количество раз. Для этого создает экземпляр timeit.Timer()
с заданным выражением stmt
, кодом настройки setup
и функцией таймера timer
и запускает его метод Timer.timeit()
с заданным number
числом выполнений в цикле.
Необязательный аргумент globals
указывает пространство имен для выполнения кода выражения stmt
.
Аргументы stmt
и setup
также могут содержать несколько операторов, разделенных ';'
или переводы строк, если они не содержат многострочных строковых литералов.
Параметры stmt
и setup
также могут принимать объекты, которые можно вызывать без аргументов. Обратите внимание, что временные издержки в этом случае немного больше из-за дополнительных вызовов функций.
Сравнение производительности трех различных выражений.
>>> import timeit >>> timeit.timeit('"-".join(str(n) for n in range(100))', number=10000) 0.3018611848820001 >>> timeit.timeit('"-".join([str(n) for n in range(100)])', number=10000) 0.2727368790656328 >>> timeit.timeit('"-".join(map(str, range(100)))', number=10000) 0.23702679807320237
Чтобы предоставить модулю timeit
доступ к определенным функциям в коде, можно передать параметр настройки, который содержит оператор импорта:
def test(): """Stupid test function""" L = [i for i in range(100)] if __name__ == '__main__': import timeit print(timeit.timeit("test()", setup="from __main__ import test"))
Другой вариант - передать функцию globals()
аргументу globals
, что приведет к выполнению кода в текущем глобальном пространстве имен. Это может быть удобнее, чем указание импорта:
def f(x): return x**2 def g(x): return x**4 def h(x): return x**8 import timeit print(timeit.timeit('[func(42) for func in (f,g,h)]', globals=globals())) # 0.7024806049994368
По умолчанию метод Timer.timeit()
во время выполнения временно отключает сборку мусора. Преимущество этого подхода в том, что он делает независимые тайминги более сопоставимыми. Недостатком является то, что GC
может быть важным компонентом производительности измеряемой функции. Если это так, то GC
может быть повторно включен в качестве первого оператора в строке установки.
>>> import timeit >>> timeit.Timer('for i in range(10): oct(i)', 'gc.enable()').timeit() # 0.7002408580010524