这段Python代码有什么问题吗,为什么运行速度比Ruby慢?
我想比较一下Ruby和Python的速度,所以我选择了一个最简单的递归计算,也就是打印斐波那契数列。
这是Python的代码
#!/usr/bin/python2.7
def fib(n):
if n == 0:
return 0
elif n == 1:
return 1
else:
return fib(n-1)+fib(n-2)
i = 0
while i < 35:
print fib(i)
i = i + 1
这是Ruby的代码
#!/usr/bin/ruby
def fib(n)
if n == 0
return 0
elsif n == 1
return 1
else
fib(n-1)+fib(n-2)
end
end
i = 0
while (i < 35)
puts fib(i)
i = i + 1
end
经过几次运行,时间报告显示这个平均值
real 0m4.782s
user 0m4.763s
sys 0m0.010s
这是Ruby的结果,现在Python2.7的结果是
real 0m11.605s
user 0m11.563s
sys 0m0.013s
这是怎么回事呢?
5 个回答
2
所以这段代码中,Python的运行速度大约比Ruby慢两倍多。不过在其他代码中,Python可能会比Ruby快。
你写的fib()函数运行时间是指数级的,这样会很慢。其实可以通过使用循环来避免这种情况。下面是Python的例子:
a, b = 1, 1
for i in range(35):
a, b = b, a+b
print b
2
我对比较Ruby和Python的速度很感兴趣。
用微基准测试来比较编程语言其实并不好,尤其是在你还没掌握这两种语言的时候。如果你想要一个在现实中有意义的基准测试,那就需要花费很多精力去做,或者你可以在网上搜索“语言对决”。
这里有一个更好的比较,关于Python和Ruby。
8
Python的递归效率是导致这个开销的原因。想了解更多细节,可以看看这篇文章。上面提到的那些用迭代方法解决问题的方案在Python中更好,因为它们不会像递归那样产生函数调用的额外开销。我猜测Ruby在这方面做得更好,它明显在优化代码,而Python则没有。再次强调,那篇文章详细讨论了这个问题,使用了几乎相同的斐波那契函数。