我一直试图理解为什么Python 3在某些情况下与Python 2相比实际上需要花费很多时间,下面是我从python 3.4到python 2.7验证的少数情况.
注意:我已经解决了一些问题,比如为什么Python3中没有xrange函数? 并 在python3比python2慢得多环路 和比同一代码在Python3慢Python2,但我觉得我没有得到这背后问题的实际原因.
我已经尝试过这段代码来展示它是如何产生差异的:
MAX_NUM = 3*10**7
# This is to make compatible with py3.4.
try:
xrange
except:
xrange = range
def foo():
i = MAX_NUM
while i> 0:
i -= 1
def foo_for():
for i in xrange(MAX_NUM):
pass
Run Code Online (Sandbox Code Playgroud)
当我尝试用py3.4和py2.7运行这个程序时,我得到了以下结果.
注意:这些统计数据来自64 bit具有2.6Ghz处理器的计算机,并使用time.time()单循环计算时间.
Output : Python 3.4
-----------------
2.6392083168029785
0.9724123477935791
Output: Python 2.7
------------------
1.5131521225
0.475143909454
Run Code Online (Sandbox Code Playgroud)
我真的不认为出现了适用于变更while或xrange从2.7到3.4,我知道range已经开始作为对xrange在py3.4但文件说,
range() …
我一直在努力理解Python的循环性能,在这里我发现,对于在全局空间中具有相同迭代的循环,与函数内部的迭代相比需要花费很多时间.
import time
MAX_NUM = 50000000
# Running for loop in global space
start = time.time()
for i in xrange(MAX_NUM):
pass
print time.time() - start
# Running th same kind of loop within a function
def foo():
for i in xrange(MAX_NUM):
pass
start = time.time()
foo()
print time.time() - start
Run Code Online (Sandbox Code Playgroud)
当我执行此操作时,我目睹了执行时间的巨大差异.
2.00527501106
0.811304092407
Run Code Online (Sandbox Code Playgroud)
我想知道是什么让执行时间产生巨大差异?循环性能如何影响全局空间写入函数内部?