Python计时程序由我自己的函数实现

2024-04-23 13:53:04 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Tags: 函数程序dataframe定义timedefnp时间
2条回答

这是错误的,因为您的代码f1()实际上没有在两个clock()命令之间运行f1()在调用timeit之前进行求值,而不是在调用内。有关详细信息,请参见here

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重写为decorator

def timeit(func, *args, **kwargs):
    a = time.clock()
    func(*args, **kwargs)
    b = time.clock()
    print(b - a)

相关问题 更多 >