timeit бросает ключевую ошибку в Python

Я пытаюсь рассчитать время простого метода Python, используя timeit, но продолжаю получать следующую ошибку

File "<timeit-src>", line 6, in inner
KeyError: 'tree'

Код, как показано ниже, создает объект «дерево», а затем я пытаюсь передать этот объект в объект Timer. Думаю, проблема именно в этом.

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

Как мне это сделать?

if __name__=="__main__":

    tree = mkthing(0,10)

    t1=timeit.Timer("binarytree.traverse_asc(locals()['tree'],binarytree.printout)","import binarytree")
    print t1.repeat(2, 3)

person jule64    schedule 03.02.2013    source источник


Ответы (2)


вы можете сделать: from __main__ import tree в коде установки:

t1 = timeit.Timer("binarytree.traverse_asc(tree,binarytree.printout)",
                  setup = "import binarytree; from __main__ import tree")

Или, что еще лучше, полностью переместите процесс создания вещи (tree) в код установки:

t1 = timeit.Timer("binarytree.traverse_asc(tree,binarytree.printout)",
                  setup = "import binarytree; tree = mkthing(0,10)")
person mgilson    schedule 03.02.2013

timeit.Timer оценивает оператор, который вы передаете внутри модуля timeit. Он не может получить доступ к переменной дерева.

вопрос несколько связан и должно помочь вам понять суть.

person emperorcezar    schedule 03.02.2013