जो आप इंगित कर रहे हैं वह Generator
पायथन में है। पर एक नज़र डालें: -
दस्तावेज़ देखें: - Generator Expression
जो बिल्कुल एक ही उदाहरण आप
प्रलेखन से पोस्ट किया है शामिल हैं: -
जनरेटर इटरेटर बनाने के लिए एक सरल और शक्तिशाली उपकरण हैं। वे नियमित कार्यों की तरह लिखे गए हैं लेकिन जब भी वे डेटा वापस करना चाहते हैं तो उपज स्टेटमेंट का उपयोग करें। हर बार जब अगले() कहा जाता है, जनरेटर शुरू जहां यह छोड़ दिया बंद (यह याद है सभी डेटा को महत्व देता और जो बयान पिछले मार डाला गया था)
जेनरेटर List Comprehension
कि आप square brackets
के बजाय साथ उपयोग करने के लिए इसी तरह के हैं brackets
, लेकिन वे अधिक स्मृति कुशल हैं। वे एक ही समय में परिणाम के पूर्ण list
वापस नहीं लौटते हैं, लेकिन वे जनरेटर ऑब्जेक्ट वापस करते हैं। जब भी आप generator
ऑब्जेक्ट पर next()
का आह्वान करते हैं, तो जनरेटर अगले मान को वापस करने के लिए yield
का उपयोग करता है।
List Comprehension
के लिए की तरह ऊपर कोड दिखेगा: -
[x * x for x in range(10)]
तुम भी स्थितियों के लिए के अंत में परिणाम को फिल्टर करने की जोड़ सकते हैं।
[x * x for x in range(10) if x % 2 != 0]
यह, 5 के लिए सीमा 1 में 2 से गुणा numbers
की एक सूची वापस आ जाएगी अगर नंबर 2 से विभाज्य नहीं है।
yield
के उपयोग का चित्रण Generators
का एक उदाहरण हो सकते हैं: -
def city_generator():
yield("Konstanz")
yield("Zurich")
yield("Schaffhausen")
yield("Stuttgart")
>>> x = city_generator()
>>> x.next()
Konstanz
>>> x.next()
Zurich
>>> x.next()
Schaffhausen
>>> x.next()
Stuttgart
>>> x.next()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
तो, आप देखते हैं कि, next()
के लिए हर कॉल कार्यान्वित अगले yield()
generator
में। और अंत में यह StopIteration
फेंकता है।
जनरेटर और सूची भी समझते हैं, जो बहुत समान दिखते हैं: '[x * x x x श्रेणी में (10)] '। आप परिणामों को फ़िल्टर करने के लिए एक शर्त भी शामिल कर सकते हैं: 'x x x x x (x) x x 2 == 0 या x% 3 == 0]'। –