En verimli baÅŸka en bittiÄŸinde ise-elif-elif-baÅŸka bir ifade etmenin yolu?
Hangi zamanın ™'unda baÅŸka deyim yürütülür-elif-elif-eÄŸer baÅŸka bir açıklama var:
if something == 'this':
doThis()
elif something == 'that':
doThat()
elif something == 'there':
doThere()
else:
doThisMostOfTheTime()
Bu yapı yapılırbir sürüüzerinden düşmeden her şartta gider beri , ama bu başka bu çok verimli bırak Pythonic değil hissediyorum. Öte yandan, yine de test Yani eğer bu iki koşuldan birini yerine getirilirse bilmek lazım, değil mi.
Herkes bu daha verimli bir şekilde yapılabilir ve nasıl biliyor mu, yoksa bu sadece mümkün olan en iyi şekilde yapmak için?
CEVAP
Bir sözlük oluşturmak istiyorum :
options = {'this': doThis,'that' :doThat, 'there':doThere}
Şimdi sadece kullanın:
options.get(something, doThisMostOfTheTime)()
something
options
dict bulunursa o zaman dict.get
varsayılan değer doThisMostOfTheTime
dönecektir
Bazı zamanlama karşılaştırmaları:
Senaryo:
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()
Sonuçlar:
>>> 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
varolmayan anahtarları ve 100 geçerli tuşlar::
>>> %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
Yani, bu anahtarı kullanmak için normal bir sözlük kontrol etmek için key in options
en etkili yolu burada
if key in options:
options[key]()
else:
doSomethingElse()
AngularJS şablonları başka bir ifade...
BaÅŸka bir python betiÄŸi python betiÄŸi ...
başka kullanarak lambda ifade için bir...
Ne'in PHP bir dize baÅŸka bir dize...
Bir dize kontrol etmek için en hızlı y...