为什么程序在放入函数时要快得多?

Ric*_*bby 8 python performance local-variables

这是我做的,我创建了2个过程,一个在函数中,一个在python文件中.即使它完全相同,python文件本身的一个运行速度差不多2倍.为什么?

Bellow是一个带有2个过程的例子,它们只是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
Run Code Online (Sandbox Code Playgroud)

这是我得到的(我尝试了一千个样本,结果如​​下):

time with function  0.0950000286102
time without function  0.15700006485
Run Code Online (Sandbox Code Playgroud)

用xrange代替范围我得到:

time with function  0.0460000038147
time without function  0.107999843597
Run Code Online (Sandbox Code Playgroud)

因此,用于构建列表就像0.05秒

我知道这可能是一个无用的问题,但如果有人知道为什么这么快,我会很高兴知道

Amb*_*ber 14

唯一显着的区别是函数中的版本仅更新该函数的局部变量,而不在函数中的版本正在更新全局变量k.

如前所述这里:

对于for循环的非映射版本,我们可用的最终加速是尽可能使用局部变量.如果将上述循环强制转换为函数,则append和upper将变为局部变量.Python比全局变量更有效地访问局部变量.

  • 来自Raymond Hettinger的好基准[这里](http://code.activestate.com/recipes/577834/) (3认同)