在函数内部使用timeit

时间:2016-03-04 22:21:43

标签: python time timeit

假设我想测试两个这样的堆实现:

def test_heap():
    for i in range(15):
        test_list = random.sample(range(10000), 1000)
        print(timeit("h = heap1(test_list)", "setup"))
        print(timeit("h = heap2(test_list)", "setup"))

if __name__ == "__main__":
    test_heap()

我不想将test_heap中的任何内容放入主要内容,设置声明应该是什么,以便我可以将test_list导入timeit

1 个答案:

答案 0 :(得分:1)

你需要的一些名字显然是全局的。 (至少,我认为它们是因为它们没有显示。)你可以从StackView导入它们。

__main__

"from __main__ import heap1, heap2" 更难了。您可以从函数的test_list获取,但locals()中没有。在这种情况下可能最容易做的事情,因为它只是一个整数列表,就是构造一个字符串版本的列表并让Python对它进行评估。

timeit()

(如果您有例如对象实例,这将无法正常工作。)

将它们与分号放在一起,您将获得以下设置字符串:

"test_list = %r" % test_list

(另外,请记住关闭括号)