Mi sono imbattuto in un comportamento di Python che mi ha sorpreso e
che mi ha confermato nell'idea che i generatori per me sono un po' un
mistero.
Una funzione prende come argomento una sequenza e ne stampa gli elementi:
def mostra(sequenza):
for e in sequenza:
print(e)
Ti ridei che l'unica cosa che sfugge è un paio di parentesi :-)
Prova così:
mostra((n*n*n for n in range(5)))
2012/1/3 Daniele Zambelli daniele.zambe...@gmail.com
Mi sono imbattuto in un comportamento di Python che mi ha sorpreso e
che mi ha confermato nell'idea che i generatori per me sono
2012/1/3 Daniele Zambelli daniele.zambe...@gmail.com
A me il comportamento sembra strano e incoerente, cosa mi sfugge?
Secondo me ti sfugge che hai consumato il generatore:
cubi = (n*n*n for n in range(5))
for n in cubi: print n
...
0
1
8
27
64
for n in cubi: print n
...
Ciao.
Marco.
2012/1/3 Daniele Zambelli daniele.zambe...@gmail.com
Anche di questo posso stampare gli elementi:
for n in cubi:
print(n)
0
1
8
27
64
Mentre lo fai, esaurisci il generatore.
Ma se lo passo alla funzione non viene stampato niente:
mostra(cubi)
A me il comportamento
On Tue, Jan 3, 2012 at 09:39, Daniele Zambelli
daniele.zambe...@gmail.com wrote:
Ma se lo passo alla funzione non viene stampato niente:
Non stampa nulla se lo passi alla tua funzione _dopo_ che ci hai
già ciclato sopra una volta, arrivando quindi in fondo. :-P
A quel punto cubi.next()
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA1
Il 03/01/2012 09:39, Daniele Zambelli ha scritto:
Mi sono imbattuto in un comportamento di Python che mi ha sorpreso e
che mi ha confermato nell'idea che i generatori per me sono un po' un
mistero.
Come ti hanno già detto, i generatori non hanno