Δημοσιεύτηκε: 19 Οκτ 2009, 10:01
από sokoban4ever
@da_perama1
Ο κώδικας είναι με generator expressions http://www.python.org/dev/peps/pep-0289/
είναι μία πάρα πολύ γρήγορη τεχνική δημιουργίας iterator γιατί καταναλώνει εξαιρετικά λιγότερη μνήμη σε σχέση
με list comprehensions .
δεν το υπολογίζει μια φορά όλο στην μνήμη αλλά σε κάθε iteration
δες το Spoiler
Spoiler: show
πχ
Κώδικας: Επιλογή όλων
>>> list_comprehension = [ x for x in xrange(999999)]
>>> list_comprehension.__sizeof__() # δίνει το μέγεθος του αντικειμένου στην μνήμη σε bytes
8697440
>>> list_comprehension.__sizeof__() / 1024.0 / 1024.0
8.294525146484375

Μιλάμε περίπου 8.3 Megabytes στην μνήμη :shock:


ενώ με generator expressions
πχ
Κώδικας: Επιλογή όλων
>>> generator_expr = ( i for i in xrange(999999))
>>> generator_expr.__sizeof__()
48


Μιλάμε για μόνο 48 bytes στην μνήμη :thumbup:



Σύγκριση


Κώδικας: Επιλογή όλων
>>> list_comprehension.__sizeof__()/ generator_expr.__sizeof__()
181196


Για το παράδειγμα μιλάμε για 181196 φορές εξοικονόμηση χώρου στην μνήμη...


;)
Πράγμα που επηρεάζει και τον χρόνο εκτέλεσης ενός προγράμματος
Πέρα λοιπόν από την κομψότητα του κώδικα είναι και για
την βελτιστοποίηση του προγράμματος

με λίγα λόγια ...
Python Rules :thumbup:
:D