辞書を作成します。
options = {'this': doThis,'that' :doThat, 'there':doThere}
今すぐ使用してください:
options.get(something, doThisMostOfTheTime)()
辞書にsomething
見つからない場合は、デフォルト値を返しますoptions
dict.get
doThisMostOfTheTime
いくつかのタイミング比較:
脚本:
from random import shuffle
def doThis():pass
def doThat():pass
def doThere():pass
def doSomethingElse():pass
options = {'this':doThis, 'that':doThat, 'there':doThere}
lis = range(10**4) + options.keys()*100
shuffle(lis)
def get():
for x in lis:
options.get(x, doSomethingElse)()
def key_in_dic():
for x in lis:
if x in options:
options[x]()
else:
doSomethingElse()
def if_else():
for x in lis:
if x == 'this':
doThis()
elif x == 'that':
doThat()
elif x == 'there':
doThere()
else:
doSomethingElse()
結果:
>>> from so import *
>>> %timeit get()
100 loops, best of 3: 5.06 ms per loop
>>> %timeit key_in_dic()
100 loops, best of 3: 3.55 ms per loop
>>> %timeit if_else()
100 loops, best of 3: 6.42 ms per loop
以下のために10**5
存在しないキーと100の有効なキー::
>>> %timeit get()
10 loops, best of 3: 84.4 ms per loop
>>> %timeit key_in_dic()
10 loops, best of 3: 50.4 ms per loop
>>> %timeit if_else()
10 loops, best of 3: 104 ms per loop
したがって、通常の辞書の場合、キーを使用してチェックすることがkey in options
ここで最も効率的な方法です。
if key in options:
options[key]()
else:
doSomethingElse()
sort
あなたは上の場合/他...チェーンを実行しているもの、のいずれかの条件が一端であるために一致することを、すべての要素、およびすべての残りは他にあるような?もしそうなら、それがより速く/よりエレガントであるかどうかを見ることができます。ただし、パフォーマンスの問題がない場合は、最適化について心配するには早すぎます。