나는 사전을 만들 것이다.
options = {'this': doThis,'that' :doThat, 'there':doThere}
이제 다음을 사용하십시오.
options.get(something, doThisMostOfTheTime)()
dict에 something없는 경우 기본값을 반환합니다.optionsdict.getdoThisMostOfTheTime
몇 가지 타이밍 비교 :
스크립트:
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당신이 당신의 경우 / 다른 ... 체인을 실행하는 것, 조건 중 하나가 한쪽 끝에있는에 대한 일치하는 모든 요소 및 모든 나머지는 다른에 있는지 등? 그렇다면 그것이 더 빠르고 우아한 지 아닌지 알 수 있습니다. 그러나 성능 문제가 없다면 최적화에 대해 걱정하기에는 너무 이릅니다.