我正在使用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()
为什么我的代码不在函数内部工作,我该如何解决?
答案 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,使用这样的函数会为所有定时调用增加一点开销。