Python3中的循环比Python2慢很多

1 投票
1 回答
713 浏览
提问于 2025-04-19 23:03

我的项目需要对股票进行大量循环和统计计算。这个项目是用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.85秒

让我感到惊讶的是,python2的速度大约是python3的两倍。

这是为什么呢?即使只是一个简单的循环?

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

我真的需要把我的代码转回到python2吗?或者有没有什么方法可以优化python3中的循环,提高它的性能呢?

1 个回答

1

我把你的循环次数增加了,并且关闭了输出(因为显示出来会慢很多)。
我不是Python方面的专家,但你可以用JIT编译器pypy来加速你的Python代码,比如说(不过它还是比luajit慢)。
另外,关于Python 3和Python 2的这个话题也许对你会很有趣。

python

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

撰写回答