-2

我写了这个快速测试脚本来检查,但我现在只能访问 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()")

我正在寻找加快一些代码的速度,我想知道这两种不同的执行方式之间是否存在很大的速度差异。

4

1 回答 1

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

当我们用range替换xrange时(xrange 在 3.x 中消失了),几乎没有区别,就像其他人说的那样。我在 2.6 上测试过

充分:

0.597590923309
0.598859071732
于 2013-03-28T15:53:36.200 回答