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 で分ける方がずっと効果的」
|