timeit在Python中抛出keyerror

timeit throwing keyerror in Python

我试图用timeit对一个简单的python方法计时,但我一直得到以下错误

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

下面显示的代码创建一个"树"对象,然后我尝试在计时器对象中传递该对象。我想这就是问题所在。

注意,如果我把binarytree.mkthing(0,10)传递给计时器,代码就可以工作了。但是这样做在每次通过时都会调用mkthing。我只想调用它一次,然后重用它。

我该怎么做呢?

1
2
3
4
5
6
if __name__=="__main__":

    tree = mkthing(0,10)

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


您可以在设置代码中执行:from __main__ import tree

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

或者更好的方法是,将该对象的生成(tree移动到设置代码中:

1
2
t1 = timeit.Timer("binarytree.traverse_asc(tree,binarytree.printout)",
                  setup ="import binarytree; tree = mkthing(0,10)")

timeit.timer评估您在timeit模块中传递的语句。它无法访问树变量。

这个问题有些关联,应该有助于你掌握要点。