在python中循环比python2慢得多

时间:2014-09-05 03:13:19

标签: python python-3.x lua

我的项目涉及股票和统计计算的大量循环。它是用python3编写的。随着数据变大,我觉得脚本性能很慢。我尝试了lua,因为它在速度方面声名鹊起,并尝试进行如下测试,也将python2作为基准测试。

只有一个简单的循环作为测试代码:

lua版

for i=1,100,1 do
    for j=1,100,1 do
        print(i*j)
    end
end

python版

for i in range(1,101):
    for j in range(1,101):
        print(i*j)

结果如下(尝试了几次并为每组选择最佳):

lua5.2.3:0.461秒
python2.7.6:0.429秒
python3.4:0.85sec

令我惊讶的是python2比python3快2倍。

为什么呢?甚至用一个简单的循环?

我认为python3是python的未来,所以我从一开始就学习了python3。

我是否真的需要将我的代码移植回python2,或者我可以通过循环来调整以增强其在python3中的性能?

1 个答案:

答案 0 :(得分:1)

我已经增加了你的循环并禁用了输出(当它显示时它会慢得多。)
我不是蟒蛇专家。但是你可以使用jit编译器pypy加速你的python代码,例如: (但仍然比luajit慢。) 此外,this topic about python3 and python2也可能对您有用。

r=0
for i in range(1,10000):
    for j in range(1,10000):
        r=i*j

python3

$ time python3 loop.py 

real    0m16.612s
user    0m16.610s
sys 0m0.000s

python2

$ time python2 loop.py 

real    0m11.218s
user    0m11.190s
sys 0m0.007s

pypy

$ time pypy loop.py 

real    0m0.923s
user    0m0.900s
sys 0m0.020s

LUA

local r=0
for i=1,10000,1 do
    for j=1,10000,1 do
        r=i*j
    end
end

lua 5.2.3

$ time lua loop.lua 

real    0m1.123s
user    0m1.120s
sys 0m0.000s

luajit

$ time luajit loop.lua 

real    0m0.074s
user    0m0.073s
sys 0m0.000s