यदि यह एक बड़ी सूची है और आपको केवल एक बार आईडी को संसाधित करने की आवश्यकता है तो जनरेटर अभिव्यक्ति भी होती है।
ids = (obj.id for obj in my_objects)
for id in ids:
do_something(id)
एक जनरेटर अभिव्यक्ति रैंडम एक्सेस का समर्थन नहीं करता, लेकिन आप मांग पर प्रत्येक आईडी मिल जाएगा और इसलिए सभी को एक बार एक सूची निर्माण से बचा जाता है। जनरेटर अभिव्यक्ति xrange
है क्योंकि सूची की समझ range
है।
जनरेटर अभिव्यक्तियों के साथ एक और चेतावनी यह है कि इसे केवल तब तक एक्सेस किया जा सकता है जब तक कि इसमें कोई संसाधन अभी भी खुला न हो। उदाहरण के लिए, निम्न कोड विफल हो जाएगा।
with open(filename) as f:
lines = (line for line in f)
# f is now closed
for line in lines:
print line
बराबर सूची समझ इस मामले में काम करेगा। उनके सही मन में
सही .. सूची comprehensions। उन लोगों के बारे में भूल गए :) – mpen