2017-08-31 61 views
0

下面的Python代码试图两次运行相同的功能和输出运行:为什么在同一个输入中运行同样的函数两次会浪费python的不同时间?

def test_f(f1,ip): 
    st = time.time() 
    f1(*ip) 
    print(time.time()-st) 

test_f(math.sin,[100]) 
test_f(math.sin,[100]) 

的三个测试产出低于:

7.15255737305e-06 
1.19209289551e-06 

7.86781311035e-06 
9.53674316406e-07 

6.91413879395e-06 
9.53674316406e-07 

我不知道为什么输出是如此不同?为什么第二次执行比第一次更快?我也尝试运行五次,结果如下:

8.10623168945e-06 
1.19209289551e-06 
0.0 
0.0 
0.0 
+2

“时间”与其他计时方法相比并不十分准确。请尝试使用'timeit.timeit'运行我们的测试。 –

回答

1

在CPython的,当一个模块编译,将创建一个代码对象(其中包含字节码),但实际的函数调用需要框架对象(涉及一些运行时分配和初始化)。作为一种优化,这些框架对象有时保持为“僵尸”以供以后重用。下面是在源frameobject.c广泛注释的一部分:

/*堆栈帧分配,并在相当大的速率释放。 在试图改善的功能调用速度,我们:

如果你正在观察不是time.time在该决议不可靠的一个简单的神器,它是创造之间的时间差一个僵尸(更慢)和reanimating一个僵尸(更快)。

相关问题