我在这里定义了一个函数来计算过程'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
答案 0 :(得分:1)
timeit(f1())
调用f1
,然后将其返回值传递给timeit
,因此实际上测量的只是调用{{1} }。
您需要传递函数自身并在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
改写为decorator。
timeit
答案 1 :(得分:0)
这是错误的,因为您的代码f1()
实际上并未在两个clock()
命令之间运行。 f1()
在调用timeit
之前而不是在调用之内进行评估。有关更多信息,请参见here。