यदि यह पैरेन्स में है, लेकिन कोष्ठक नहीं है, तो यह तकनीकी रूप से एक जनरेटर अभिव्यक्ति है। जेनरेटर के भाव पहली बार अजगर 2.4 में पेश किए गए थे।
http://wiki.python.org/moin/Generators
शामिल होने के बाद का हिस्सा ( str(_) for _ in xrange(10) )
, अपने आप में, एक जनरेटर अभिव्यक्ति है। आप कुछ ऐसा कर सकते हैं:
mylist = (str(_) for _ in xrange(10))
''.join(mylist)
और इसका मतलब बिल्कुल वही है जो आपने ऊपर के दूसरे मामले में लिखा था।
जनरेटर में कुछ बहुत ही रोचक गुण होते हैं, जिनमें से कम से कम यह नहीं है कि जब आपको एक की आवश्यकता नहीं होती है तो वे पूरी सूची को आवंटित नहीं करते हैं। इसके बजाय, एक फ़ंक्शन जैसे "पंप" एक समय में जनरेटर अभिव्यक्ति से आइटम को बाहर निकालता है, छोटे मध्यवर्ती भागों पर अपना काम करता है।
आपके विशेष उदाहरणों में, सूची और जनरेटर संभवतः बहुत अलग तरीके से प्रदर्शन नहीं करते हैं, लेकिन सामान्य तौर पर, जब भी मैं कर सकता हूं, तो मैं जनरेटर अभिव्यक्तियों (और यहां तक कि जनरेटर फ़ंक्शन) का उपयोग करना पसंद करता हूं, क्योंकि जनरेटर के लिए पूरी सूची की तुलना में धीमा होना बेहद दुर्लभ है भौतिकीकरण।
join
है कि यह सबसे अधिक संभावना है कि सी में लिखा है और इसलिए एक सूची समझ की तुलना में बहुत तेजी से चलता है ... परीक्षण का समय!