En verimli başka en bittiğinde ise-elif-elif-başka bir ifade etmenin yolu? | Netgez.com
SORU
18 HAZİRAN 2013, Salı


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
18 HAZİRAN 2013, Salı


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()

Bunu PaylaÅŸ:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VÄ°DEO

Rastgele Yazarlar

  • Fraser Raft

    Fraser Raft

    9 Mart 2010
  • L- Crysis

    L- Crysis

    30 Aralık 2011
  • Sergio Fernandez

    Sergio Ferna

    1 EKÄ°M 2009