python速度组成的功能

时间:2016-11-19 23:28:05

标签: python performance

我想了解为什么当我以不同方式编写函数时,我会看到速度差异。 我最感兴趣的是理解为什么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

1 个答案:

答案 0 :(得分:1)

对于初学者,案例2有一个额外的电话 - fgh(x),而在案例1中你直接打电话给h(g(f(x)))。在一个多次执行的紧密循环中,额外的函数调用可以增加额外的执行时间。案例1内联调用,因此速度更快。案例3正在做一些额外的任务和加载变量,这解释了为什么它变慢了。