python - 为什么将过程放入函数中会快得多?

标签 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

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

time with function  0.0950000286102
time without function  0.15700006485

用 xrange 而不是 range 我得到:

time with function  0.0460000038147
time without function  0.107999843597

所以它就像 0.05 秒用于构建列表

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

最佳答案

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

如前所述here :

The final speedup available to us for the non-map version of the for loop is to use local variables wherever possible. If the above loop is cast as a function, append and upper become local variables. Python accesses local variables much more efficiently than global variables.

关于python - 为什么将过程放入函数中会快得多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7028770/

相关文章:

c# - .NET 二进制文件读取性能

c++ - 如何使用指针从不同的函数访问局部变量?

C# 可重用函数转储局部变量的当前值

python - 摆脱 Tensorflow Object Detection API 中不同类别的重叠边界框

python - Sqlalchemy(和 alembic)没有多态联合的具体表继承

python - mypy:定义动态字典中特定键的类型

java - Apache POI 使用 HSSF 比 XSSF 快得多 - 下一步是什么?

sql - 多列(每种类型一列)与单个 TEXT/Clob 列

python - 为任何需要重复两次的东西写一个函数总是最好的主意吗?

python - Python中全局变量和局部变量的速度