Python 为什么将一个过程放入函数中会快得多?
这就是我所做的,我创建了两个过程,一个在函数中,一个在python文件本身中。python文件本身上的一个运行速度几乎慢了2倍,即使它完全相同。为什么? Bellow是一个示例,其中有两个过程只是p元素上的循环 我有以下python文件:Python 为什么将一个过程放入函数中会快得多?,python,performance,local-variables,Python,Performance,Local Variables,这就是我所做的,我创建了两个过程,一个在函数中,一个在python文件本身中。python文件本身上的一个运行速度几乎慢了2倍,即使它完全相同。为什么? Bellow是一个示例,其中有两个过程只是p元素上的循环 我有以下python文件: from time import * P=1000000 #range of the 2 loops def loop(N): for k in range(N): continue start=time()
from time import *
P=1000000 #range of the 2 loops
def loop(N):
for k in range(N):
continue
start=time()
loop(P)
stop1=time()
for k in range(P):
continue
stop2=time()
print "time with function ",stop1-start
print "time without function ",stop2-stop1
以下是我得到的结果(我用1000个样本进行了尝试,结果如下):
使用xrange而不是range,我得到:
time with function 0.0460000038147
time without function 0.107999843597
所以它就像0.05秒用来建立列表
我知道这可能是个没用的问题,但如果有人知道为什么速度会快得多,我很高兴知道唯一的显著区别是函数中的版本只更新该函数的局部变量,而函数中的版本不更新全局变量
k
如上所述:
对于for循环的非map版本,我们可以使用的最终加速是尽可能使用局部变量。如果将上述循环转换为函数,则append和upper将成为局部变量Python访问局部变量比访问全局变量更有效。
另外,用
xrange
而不是range
再试一次,看看其中有多少在构建列表。编译器是否应该意识到它是一个无操作并完全删除它?Raymond Hettinger提供的很好的基准测试
time with function 0.0460000038147
time without function 0.107999843597