[Linuxtrent] Corso Python - Errata

  • From: Luca Manini <manini.luca@xxxxxxxxxx>
  • To: Linux Trent <linuxtrent@xxxxxxxxxxxxx>
  • Date: Fri, 14 Nov 2003 08:43:39 +0100

Ciao a tutti, 

dopo la figuraccia di ieri con il yield toppato...mi sono accorto che
mi ero mangiato un while. Come " rimborso" ecco tre implementazioni
possibili: la prima è la meno carina (per via del range), la seconda è
la più ovvia (e anche l'originale prima della sparizione del while),
la terza forse la più elegante (per la separazione del caso normale da
quello eccezionale usando il while/else che ci aveva lasciati
perplessi e per considerare la raise il modo "normale" di terminare il
loop, che per l'implementazione richiesta dall'iteratore è pure
giusto. ).

        bye, Luca

def foo():
    "generator using for and range"
    for i in range (10):
        if i > 9: raise StopIteration
        yield i
        i += 1

def zot():
    "generator using while"
    i = 0
    while 1:
        if i > 9: raise StopIteration
        yield i
        i += 1

def bar():
    "generator using while/else"
    i = 0
    while i < 10: 
        yield i
        i += 1
    else:
        raise StopIteration

if __name__ == "__main__":

    def go(f):
        "testing function"
        for i in f(): print i,
        print

    map (go, (foo, bar, zot))



-- 
Per iscriversi  (o disiscriversi), basta spedire un  messaggio con OGGETTO
"subscribe" (o "unsubscribe") a mailto:linuxtrent-request@xxxxxxxxxxxxx


Other related posts: