这段Python代码有什么问题吗,为什么运行速度比Ruby慢?

5 投票
5 回答
1940 浏览
提问于 2025-04-16 06:15

我想比较一下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则没有。再次强调,那篇文章详细讨论了这个问题,使用了几乎相同的斐波那契函数。

撰写回答