我正在使用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()
为什么函数内部的代码不能正常工作?如何解决?
最佳答案 您的setup语句从模块全局变量中导入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,并且使用这样的函数会为所有定时调用增加一小部分开销.