相关疑难解决方法(0)

为什么等效的Python代码要慢得多

有人可以解释为什么下面这些简单的代码(Euclid算法的实现找到最大的共同点)比Ruby中的等效代码慢3倍?

iter_gcd.py的内容:

from sys import argv,stderr

def gcd(m, n):
    if n > m:
        m, n = n, m
    while n != 0:
        rem = m % n
        m = n
        n = rem
    return m

# in Python3 code there is xrange replaced with range function
def main(a1, a2):
    comp = 0
    for j in xrange(a1, 1, -1):
        for i in xrange(1, a2):
            comp += gcd(i,j)

    print(comp)

if __name__ == '__main__':
    if len(argv) != 3:
        stderr.write('usage: {0:s} num1 num2\n'.format(argv[0]))
        exit(1) …
Run Code Online (Sandbox Code Playgroud)

ruby python python-3.x

19
推荐指数
3
解决办法
4145
查看次数

这个python代码有什么问题,为什么它比ruby运行得那么慢?

我有兴趣比较ruby speed和python,所以我采用了最简单的递归计算,即打印fibonacci sequance.

这是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
Run Code Online (Sandbox Code Playgroud)

这是红宝石代码

#!/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
Run Code Online (Sandbox Code Playgroud)

在几次运行中,时间报告此平均值

real    0m4.782s 
user    0m4.763s 
sys     0m0.010s
Run Code Online (Sandbox Code Playgroud)

多数民众赞成红宝石,现在python2.7给出

real …
Run Code Online (Sandbox Code Playgroud)

ruby python performance fibonacci

4
推荐指数
1
解决办法
1326
查看次数

标签 统计

python ×2

ruby ×2

fibonacci ×1

performance ×1

python-3.x ×1