Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python3中的循环比python2慢得多_Python_Python 3.x_Lua - Fatal编程技术网

python3中的循环比python2慢得多

python3中的循环比python2慢得多,python,python-3.x,lua,Python,Python 3.x,Lua,我的项目涉及股票和统计计算的重循环。它是用蟒蛇3写的。随着数据越来越大,我觉得脚本的性能相当慢。我尝试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):

我的项目涉及股票和统计计算的重循环。它是用蟒蛇3写的。随着数据越来越大,我觉得脚本的性能相当慢。我尝试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.461sec
蟒蛇2.7.6:0.429秒
蟒蛇3.4:0.85秒

让我惊讶的是,python2比python3快2倍左右

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

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


我真的需要将我的代码移植回python2吗?或者我可以通过循环来提高它在python3中的性能吗?

我增加了你的循环并禁用了输出(显示时速度要慢得多)。
我不是python专家。但是您可以使用jit编译器pypy来加速python代码,例如(但仍然比luajit慢) 此外,你可能也会感兴趣

python 蟒蛇3 蟒蛇2 皮皮 卢阿 lua 5.2.3 卢阿吉特
如果你的目标是让计算速度加快,那你为什么要测量
print
?@AlexanderO'Mara:你可能有什么发现。简单地执行乘法(不使用
print
)大约快一个数量级。您可以通过将输出缓冲到字符串中,并在末尾调用print语句一次,或每隔几次刷新一次来加速代码。在python2版本中,使用xrange,而不是range。PY2中的范围和PY3中的范围不同。只有到那时,你才能得到一个苹果对苹果的比较。最后的评论。你真的应该用1000000这样的大数字来代替101,才能看到真正的效果。然而,py3比py2慢50%。让我吃惊的是,Lua的速度和PyPy相当,LujIT甚至是最快的!!!!Markus您使用的是哪种Python 3版本?
r=0
for i in range(1,10000):
    for j in range(1,10000):
        r=i*j
$ time python3 loop.py 

real    0m16.612s
user    0m16.610s
sys 0m0.000s
$ time python2 loop.py 

real    0m11.218s
user    0m11.190s
sys 0m0.007s
$ time pypy loop.py 

real    0m0.923s
user    0m0.900s
sys 0m0.020s
local r=0
for i=1,10000,1 do
    for j=1,10000,1 do
        r=i*j
    end
end
$ time lua loop.lua 

real    0m1.123s
user    0m1.120s
sys 0m0.000s
$ time luajit loop.lua 

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