0

我正在尝试使用 timeit 为一个简单的 Python 方法计时,但我不断收到以下错误

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

如下所示,代码创建了一个“树”对象,然后我尝试在 Timer 对象中传递该对象。我想这就是问题所在。

请注意,如果我改为将 binarytree.mkthing(0,10) 传递给 Timer,则代码有效。然而,这样做每次都会调用 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)
4

2 回答 2

1

你可以这样做: 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)")
于 2013-02-03T03:50:04.563 回答
0

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

The question is somewhat related and should help you get the gist.

于 2013-02-03T03:50:22.880 回答