Timeit在函数内部不起作用

安娜

我只是在python中玩timeit,下面的代码可以正常工作:

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()

为什么函数中的代码无法正常工作,如何解决?

马丁·彼得斯(Martijn Pieters)

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

对于您的情况,您还必须具有一个全局mytime()函数,该函数每次调用都需要3秒才能运行。

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

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

现在,无需导入对象。这仅适用于不带任何参数的可调用对象,并且使用这样的函数会给所有定时调用带来少量开销。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章