如果我提取计算并将其放在另一个函数中则不应该 代码会慢吗?显然不是。下面,我无法相信fun2更慢 比fun1,因为fun1显然做了更多的计算。到底是怎么回事? (也许我可以有函数调用函数调用函数和真正的速度 我的代码。)
航向
##
Python代码:
MAX = 10000000
def fun1(): # 4.26 seconds.
def multiply (X, Y): # multiply two 2x2 matrices
a, b, c, d = X
e, f, g, h = Y
return a*e+b*g, a*f+b*h, c*e+d*g, c*f+d*h
X = [1,2,3,4]
Y = [5,6,7,8]
for n in range (MAX):
Z = multiply (X, Y) # Make the call
return Z
#-------------------------------------------------
def fun2(): # 6.56 seconds.
X = [1,2,3,4]
Y = [5,6,7,8]
for n in range (MAX):
Z = X[0]*Y[0] + X[1]*Y[2], \
X[0]*Y[1] + X[1]*Y[3], \
X[2]*Y[0] + X[3]*Y[2], \
X[2]*Y[1] + X[3]*Y[3] # Don't make the call.
return Z
答案 0 :(得分:0)
我不确定,但我认为可能是那个
a,b,c,d = X
然后直接引用a,b,c和d比引用X [0](等等)更快。
列表中的每个索引都是另一个查找,而a,b,c,d = X只是一次查找(我认为)。
答案 1 :(得分:0)
我终于找到了自己的问题。该功能省去了方括号,这是速度增加的来源,而不是来自函数调用本身。 Python列表包含值和位大小(或地址,我不知道哪个)。要访问x [3],计算机转到地址x读取地址x [1],移动到那里,读取地址x [2],移动到那里,读取地址x [3],移动到那里,最后访问该值。这需要时间,并且可以通过将列表元素分配给简单标识符来加速。