python中的链接if ... else表达式是否比if..elif..else语句更快?

时间:2013-03-28 15:38:15

标签: python

我编写了这个快速测试脚本来检查,但我现在只能访问pythonanywhere上的bash控制台,而且我没有得到一致的时间。

def a():
    x = 0
    for i in xrange(1000):
        if i%2==0 and i%3==0:
            x += 3
        elif i%2==0 or i%3==0:
            x += 2
        else:
            x += 1

def b():
    x = 0
    for i in xrange(1000):
        x += 3 if i%2==0 and i%3==0 else (2 if i%2==0 or i%3==0 else 1)

if __name__=="__main__":
    import cProfile
    cProfile.run("for i in xrange(1000): a()")
    cProfile.run("for i in xrange(1000): b()")

我正在寻求加速一些代码,我想知道这两种不同的方法之间是否有很大的速度差异。

1 个答案:

答案 0 :(得分:1)

就像@Pavel Anossov所说,a更快:

import timeit

def a():
    x = 0
    for i in xrange(1000):
        if i%2==0 and i%3==0:
            x += 3
        elif i%2==0 or i%3==0:
            x += 2
        else:
            x += 1

def b():
    x = 0
    for i in xrange(1000):
        x += 3 if i%2==0 and i%3==0 else (2 if i%2==0 or i%3==0 else 1)


test_a = timeit.Timer(a)
test_b = timeit.Timer(b)

print min(test_a.repeat(3, 1000))
print min(test_b.repeat(3, 1000))

输出

0.573258876801
0.591067075729

当我们将 xrange 替换为范围(xrange在3.x中消失)时,差异几乎没有,就像其他人所说的那样。我已经在2.6

上测试了它

Adequatly:

0.597590923309
0.598859071732