-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()")

私はいくつかのコードを高速化しようとしていますが、これら 2 つの異なる実行方法の間に大きな速度の違いがあるかどうか疑問に思っています。

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

xrangerangeに置き換えると(xrange は 3.x でなくなりました)、他の人が言うように、違いはほとんどありません。2.6でテストしました

適切に:

0.597590923309
0.598859071732
于 2013-03-28T15:53:36.200 に答える