Python通过我自己的函数计时程序

时间:2019-01-10 13:31:03

标签: python time runtime timeit

我在这里定义了一个函数来计算过程'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

2 个答案:

答案 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