[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