ことパフォーマンスに関してなら、「こうだと思う」とか「他の言語ではこうだ」なんていう話はただの害悪です。
「推測するな、計測せよ」という(誰が言ったか分からない)格言や、「計測すべし。計測するまでは速度のための調整をしてはならない」という哲学の通りです。
# (1) int
a1 = 1
b1 = 2
# (2)1文字目で違うことがわかる長さが等しい文字列
a2 = 'あいうえお'
b2 = 'かきくけこ'
# (3) 30文字目で違うと分かる長さが等しい文字列
a3 = 'あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほ'
b3 = 'あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへぼ'
# (4) 31文字目で違うと分かるけど長さが違う文字列
a4 = 'あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほ'
b4 = 'あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほま'
# (5)Enum
from enum import Enum
Mode = Enum('Mode', ['normal', 'gray'])
a5 = Mode.normal
b5 = Mode.gray
これらを定義して、ipythonで以下のように%timeitマジックコマンドで調べましょう。
強く実装依存なのでこの通りにはならない可能性が高いですが、macOS CPython3.6.1 で
In [2]: %timeit a1==b1
45.1 ns ± 0.844 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
In [3]: %timeit a2==b2
53.7 ns ± 0.678 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
In [4]: %timeit a3==b3
56.5 ns ± 1.23 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
In [5]: %timeit a4==b4
43.7 ns ± 0.288 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
In [6]: %timeit a5==b5
52.1 ns ± 0.171 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
と、なって「長さが違う文字列」が比較が一番速いのです。
それも1億回実行して1秒違う程度です。あなたのプログラムはそれを気にするほどのことなのですか?
だったらそもそもPythonで書くべきではないと思いませんか?
これは「あとから分かりやすい」「バグを混入させにくい」ことを優先するべき事柄です。
退会済みユーザー
2018/05/09 04:32
2018/05/09 04:34