Floating Log 27.10.2011

2011-10-27 (*)

# 比較の速さ

i と j が共に 1 のとき、どのように比較したら一番速いか、という重箱の隅をつついてみた。 今回も timeit で時間を計測。

「Python は比較の式を繋げるからいいよね」

$ python -m timeit -s'i = 1; j = 1' 'i == j == 1'
10000000 loops, best of 3: 0.176 usec per loop

「式の意味から一番自然なのは and」

$ python -m timeit -s'i = 1; j = 1' 'i == 1 and j == 1'
10000000 loops, best of 3: 0.123 usec per loop

あれ、意外に and で書いた方が速い。 いや待て。 一つ目が変数同士の比較と変数と定数の比較なのに対し、 二つ目は変数と定数を二回比べているというのが効いていたりしないか?

$ python -m timeit -s'i = 1; j = 1' 'i == 1 == j'
10000000 loops, best of 3: 0.157 usec per loop

ほら速くなった(でも and で書く方がまだ速い)。 ついでに逆パターン。

$ python -m timeit -s'i = 1; j = 1' 'i == j and i == 1'
10000000 loops, best of 3: 0.146 usec per loop

結論: 「変数同士の比較より変数と定数の比較の方が速いけど、それよりまず and で分ける方がずっと効果的」

posted at 20:52:32    #
10月 2011
       1
2 3 4 5 6 7 8
9101112131415
16171819202122
23242526272829
3031     
9月
2011
 11月
2011

浮遊する思考・浮遊する言葉を拾い集めて記録しておくページ。

Feed Icon Letterimage

Python
Desktop
Server

Twitter Updates

    follow me on Twitter

    © 2011, Matsui Fe2+ Tetsushi