[Python] Dividere stringa in parti uguali
Daniele Varrazzo
piro a develer.com
Ven 23 Maggio 2008 00:55:54 CEST
Mr.SpOOn ha scritto:
> Ma qual è il vantaggio di usare xrange piuttosto che range?
range è una funzione che costruisce una lista. Se tutto ciò di cui hai bisogno
è contare da 0 a n, non è necessario avere la lista completamente in memoria.
Se hai bisogno di contare da 0 a un milione, range() costruisce una lista con
un milione di elementi, con relativo tempo impiegato per la costruzione e
occupazione di memoria.
xrange() restituisce un generatore, un piccolo oggetto che non necessita di
tenere tutta la lista in memoria. Presenta l'interfaccia adatta per essere
iterato, fornendo su richiesta i numeri: in questo modo può essere messo in un
"for". In memoria però mantiene solo il proprio stato, ovvero a che numero è
arrivato. Questo ovviamente è molto più efficiente della creazione della lista
completa.
I generatori sono una feature molto potente del linguaggio. Tante funzioni
chiave che sono nate agli albori del linguaggio restituendo liste (range(), i
metodi di dict keys(), values(), items(), i funzionali map() e filter()...)
hanno "sviluppato" una controparte in forma di iteratore (xrange, iteritems
ecc). Visto che inoltre è facile convertire un iteratore in una lista (basta
usare il costruttore list(): range(10) può essere ottenuto con
list(xrange(10))) e che poter fare le cose in due modi diversi è contro la
filosofia Python, i metodi che creano liste in futuro verranno soppiantati da
quelli generatori (ma visto che è una modifica non backward-compatible, lo si
farà solo in Python 3.0)
--
Daniele Varrazzo - Develer S.r.l.
http://www.develer.com
Maggiori informazioni sulla lista
Python