тайм-аут.переменная помогите другим импорта в Python


Я пытаюсь использовать timeit.timeit для того, чтобы узнать, сколько времени требуется для выполнения конкретной строки кода. Проблема в том, что эта строка содержит переменные, и мне нужно их как-то импортировать, поэтому мой вопрос-как? Для большей ясности код выглядит примерно так:

def func():
    var1 = 'aaa'
    var2 = 'aab'
    t1 = timeit.timeit('var1==var2', 'from __main__ import ___', number = 10**4) #  here I'm missing what to put after the import

Если бы я пытался выполнить этот код в __main__ , я бы просто импортировал переменную напрямую с 'from __main__ import var1, var2' Есть ли решение для такого рода проблем?

2 5

2 ответа:

timeit.Timer принимает вызываемый объект , а также строку в eval

изменено в версии 2.6: параметры stmt и setup теперь могут также возьмем объекты, которые могут быть вызваны без аргументов. Это позволит встроить вызывает их в функции таймера, которая затем будет выполнена timeit (). Обратите внимание, что временные накладные расходы немного больше в этом дело из-за дополнительных вызовов функций.

(Также смотрите источник , ищите elif hasattr(stmt, '__call__'):).

Создайте замыкание над переменными и передайте его в timeit:

def func():
    var1 = 'aaa'
    var2 = 'aab'
    t1 = timeit.timeit(lambda: var1 == var2, number = 10**4)

Или эквивалентно:

def func():
    var1 = 'aaa'
    var2 = 'aab'
    def closure():
        return var1 == var2
    t1 = timeit.timeit(closure, number = 10**4)

Принятый ответ не работал для меня внутри pdb отладчика и метода класса. Решение, которое сработало, состоит в том, чтобы добавить переменные в globals():

globals()['var1'] = var1
globals()['var2'] = var2
timeit.timeit(lambda: var1 == var2, number = 10**4)