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
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之前进行评估,而不是在调用中进行评估。有关更多信息,请参阅此处。

相关内容

  • 没有找到相关文章

最新更新