Timeit不在函数内部工作

时间:2014-07-31 12:43:54

标签: python timeit

我正在使用timeit在python中玩游戏,以下代码正常运行:

def mysleep(n):
    import time
    time.sleep(n)

import timeit
for k in range (1,5):
    def mytime():
        mysleep(k)
    t1 = timeit.Timer("mytime();", "from __main__ import mytime") 
    print k, t1.timeit(1)  

但是如果我在函数中放入相同的代码,对于每个k,时间大约为3秒。

def mytest(): 
    import timeit
    for k in range (1,5):
        def mytime():
            mysleep(k)
        t1 = timeit.Timer("mytime();", "from __main__ import mytime") 
        print k, t1.timeit(1)  

mytest()

为什么我的代码不在函数内部工作,我该如何解决?

1 个答案:

答案 0 :(得分:2)

您的设置语句从模块全局导入mytime() ,但您在函数本地中定义了函数测试。因此,setup语句将失败(如果您还没有全局 mytime()函数)或导入错误的对象。

在您的情况下,您还必须拥有一个全局mytime()功能,每次调用它时仍需要3秒钟。

timeit.Timeit()也可以将 callables 作为参数而不是字符串;直接传递mytime()函数:

def mytest(): 
    import timeit
    for k in range (1,5):
        def mytime():
            mysleep(k)
        t1 = timeit.Timer(mytime) 
        print k, t1.timeit(1)  

现在无需导入对象。这仅适用于不带参数的callables,使用这样的函数会为所有定时调用增加一点开销。