Timeit在函数内部不起作用

2024-04-20 02:45:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我只是在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秒。在

^{pr2}$

为什么我在函数中的代码不能工作?我如何修复它?在


Tags: 函数代码inimportfortimedefrange
1条回答
网友
1楼 · 发布于 2024-04-20 02:45:12

setup语句从模块globals导入mytime(),但您在函数局部变量中定义了要测试的函数。因此,setup语句要么失败(如果没有globalmytime()函数),要么导入错误的对象。在

在您的例子中,您必须还有一个全局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)  

现在不需要导入对象。这只适用于不带参数的可调用项,使用这样的函数会给所有定时调用增加一个小开销。在

相关问题 更多 >