我在这里定义了一个函数来计算过程"p"所需的时间。
def timeit(p):
a=time.clock()
p
b=time.clock()
print(b-a)
然后我使用另一个函数来测试它。
d=pd.DataFrame({'x':np.random.randint(1,100,10000)})
d['s']=None
def f1():
for i in range(10000):
if d.iloc[i,0]<60:
d.iloc[i,1]='under'
elif d.iloc[i,0]<80:
d.iloc[i,1]='ok'
else:
d.iloc[i,1]='best'
使用我的时间:
timeit(f1())
5.140552730154013e-07
结果是绝对错误的。为什么?我的语法有问题吗?真实时间是:
a=time.clock()
f1()
b=time.clock()
b-a
Out[26]: 5.914697663515881
timeit(f1())
在将其返回值传递给timeit
之前调用f1
,因此您实际测量的只是调用time.clock
两次的开销。
你需要传递函数本身并在timeit
中调用它,在调用time.clock()
之间:
def timeit(p):
a=time.clock()
p() # call it here
b=time.clock()
print(b-a)
timeit(f1) # NOT here
如果以后需要传递参数,可以使用*args / **kwargs
或 将timeit
重写为装饰器。
def timeit(func, *args, **kwargs):
a = time.clock()
func(*args, **kwargs)
b = time.clock()
print(b - a)
这是
错误的,因为您的代码f1()
实际上并没有在两个clock()
命令之间运行。 f1()
在调用timeit
之前进行评估,而不是在调用中进行评估。有关更多信息,请参阅此处。