Python 用我自己的函数给程序计时

Python time the procedure by my own function

我在这里定义了一个函数来计算'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()) 在 将其 return 值传递给 timeit 之前调用 f1 ,因此您实际测量的是只是调用 time.clock 两次的开销。

您需要传递函数本身并在timeit中调用它,调用[=17=之间] ]:

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)

这是错误的,因为您的代码 f1() 实际上并没有在两个 clock() 命令之间得到 运行。 f1() 在调用 timeit 之前被计算,而不是在调用中。有关详细信息,请参阅 here