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 _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python