という一言がずーっと枕元でわんわんやってて寝付きが悪かった。
この例はほんとにいいのか?
なーんか最後までループ回っているようにしか思えないし、書き方はすっきりしたけどダメ臭がする。
試そう試そう。
timeitモジュールというやつがあるのでそれを使います。
例によってムダは多そうですが同じ分ムダしてるのでいいか。
想定するケースは、lang_list(ll)の最後尾、つまり優先順位が最下位の「kr」キーで探した場合。
回数指定無しの場合、デフォルトで100万回くるくるやるそうな。
まず昨日書いてたコードの断片:
setup='''
ll = ['en','ja','es','fr','it','ru','nl','tw','cn','kr',]
a = {}
a['kr'] = u"かんこくごでもんく"
b = [x for x in ll if x in list(a.keys())][0]
'''
t = timeit.Timer(setup)
print(t.timeit())従来こんな感じにしてますコード:
setup='''
ll = ['en','ja','es','fr','it','ru','nl','tw','cn','kr',]
a = {}
a['kr'] = u"かんこくごでもんく"
for lang in ll:
val = a.get(lang, None)
if val:
break
'''
t = timeit.Timer(setup)
print(t.timeit())結果。
一つ目:15.1518477907
二つ目:5.40611083252
はーぜんぜんだめじゃんね。
探す目当てのキーをja(優先順位2位)にしてみると
一つ目:15.2410155481
二つ目:2.00092106678
あらら。顕著な差。
リストと辞書の定義をしているので、そこのコストはどんくらいかというと、
setup='''
ll = ['en','ja','es','fr','it','ru','nl','tw','cn','kr',]
a = {}
a['kr'] = u"かんこくごでもんく"
'''
t = timeit.Timer(setup)
print(t.timeit())代入部:0.855803181689
鼻毛ですね。
リストくるくるして見つかったらやめる、のほうがマシだった。視認性も良かった。
なーんだー
すっきりはしたんだけど。

One thought on “昨日のコードほんとに速いか?”