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()

这就是我所做的,我创建了两个过程,一个在函数中,一个在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()
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