我想了解为什么当我以不同方式编写函数时,我会看到速度差异。 我最感兴趣的是理解为什么case(1)比case(2)更快。
谢谢!
import math
from time import time
def f(x):
return 2*x
def g(x):
return x*x
def h(x):
return math.sqrt(x)
time0 = time()
for x in range(1,10**7):
x_ = h(g(f(x)))
print 'h(g(f(x))): {}'.format( time() - time0)
def fgh(x):
return h(g(f(x)))
time0 = time()
for x in range(1,10**7):
x_ = fgh(x)
print 'composed: {}'.format( time() - time0)
time0 = time()
for x in range(1,10**7):
x_ = f(x)
x__ = g(x_)
x___ = h(x__)
print 'subsequent: {}'.format( time() - time0)
作为运行时,我得到:
h(g(f(x))): 2.83475399017
composed: 3.29999113083
subsequent: 3.4387819767
答案 0 :(得分:1)
对于初学者,案例2有一个额外的电话 - fgh(x)
,而在案例1中你直接打电话给h(g(f(x)))
。在一个多次执行的紧密循环中,额外的函数调用可以增加额外的执行时间。案例1内联调用,因此速度更快。案例3正在做一些额外的任务和加载变量,这解释了为什么它变慢了。