पायथन में, डेटा के अनुक्रमों के साथ काम करने के लिए इटरेटर और जेनरेटर शक्तिशाली उपकरण हैं। वे आपको पूरे अनुक्रम को मेमोरी में संग्रहीत किए बिना डेटा को पुनरावृत्त करने की अनुमति देते हैं। यह ब्लॉग व्यावहारिक उदाहरणों के साथ इटरेटर और जेनरेटर को सरल और समझने योग्य तरीके से समझाएगा।
परिभाषा: एक इटरेटर पायथन में एक ऑब्जेक्ट है जो आपको एक समय में एक संग्रह के सभी तत्वों (जैसे एक सूची या टुपल) के माध्यम से जाने की अनुमति देता है। यह इटरेटर प्रोटोकॉल का पालन करता है, जिसमें दो तरीकों को लागू करना शामिल है: __iter__() और __next__()।
इटरेटर्स कैसे काम करते हैं:
__iter__(): यह विधि इटरेटर ऑब्जेक्ट को ही लौटा देती है।
__next__(): यह विधि संग्रह से अगला मान लौटाती है। यदि वापस करने के लिए कोई और आइटम नहीं है, तो यह स्टॉपइटरेशन अपवाद उठाता है।
कस्टम इटरेटर का उदाहरण:
class MyIterator: def __init__(self, data): self.data = data self.index = 0 def __iter__(self): return self def __next__(self): if self.indexआउटपुट:
1 2 3स्पष्टीकरण: इस उदाहरण में, MyIterator एक कस्टम इटरेटर वर्ग है जो संख्याओं की सूची पर पुनरावृत्त होता है। __next__() विधि सूची में अगला आइटम लौटाती है और जब लौटने के लिए कोई और आइटम नहीं रह जाता है तो StopIteration बढ़ा देती है।
अंतर्निर्मित संग्रहों के लिए डिफ़ॉल्ट इटरेटर
पायथन अंतर्निहित संग्रहों जैसे सूचियों, टुपल्स, शब्दकोशों और सेटों के लिए डिफ़ॉल्ट इटरेटर प्रदान करता है। आप इन संग्रहों से पुनरावर्तक प्राप्त करने के लिए iter फ़ंक्शन का उपयोग कर सकते हैं और फिर उनके माध्यम से पुनरावृत्त करने के लिए अगला का उपयोग कर सकते हैं।
सूची के साथ उदाहरण:
my_list = [1, 2, 3] my_iter = iter(my_list) print(next(my_iter)) # Output: 1 print(next(my_iter)) # Output: 2 print(next(my_iter)) # Output: 3 # print(next(my_iter)) # This will raise StopIteration2. जेनरेटर क्या है?
परिभाषा: जनरेटर पायथन में एक विशेष प्रकार का इटरेटर है, जिसे एक फ़ंक्शन और यील्ड कीवर्ड का उपयोग करके परिभाषित किया गया है। जेनरेटर आपको सभी मूल्यों को एक साथ मेमोरी में संग्रहीत किए बिना मूल्यों के अनुक्रम के माध्यम से पुनरावृत्त करने की अनुमति देते हैं, जिससे वे सूचियों की तुलना में अधिक मेमोरी-कुशल बन जाते हैं।
जेनरेटर कैसे काम करते हैं:
उदाहरण:
def my_generator(): yield 1 yield 2 yield 3 gen = my_generator() for item in gen: print(item)
आउटपुट:
1 2 3
स्पष्टीकरण: इस उदाहरण में, my_generator एक जनरेटर फ़ंक्शन है जो एक-एक करके तीन मान उत्पन्न करता है। यील्ड के लिए प्रत्येक कॉल एक मान उत्पन्न करती है और अगले मान का अनुरोध होने तक फ़ंक्शन को रोक देती है।
मेमोरी दक्षता: जेनरेटर तुरंत मूल्य उत्पन्न करते हैं और पूरे अनुक्रम को मेमोरी में संग्रहीत नहीं करते हैं, जिससे वे बड़े डेटासेट या डेटा स्ट्रीम के साथ काम करने के लिए आदर्श बन जाते हैं।
उदाहरण:
def large_sequence(): for i in range(1, 1000001): yield i gen = large_sequence() print(next(gen)) # Output: 1 print(next(gen)) # Output: 2
स्पष्टीकरण: यह जनरेटर अपनी मेमोरी दक्षता को प्रदर्शित करते हुए उन सभी को मेमोरी में संग्रहीत किए बिना दस लाख संख्याओं का अनुक्रम तैयार करता है।
इटरेटर्स:
कस्टम पुनरावर्तनीय ऑब्जेक्ट: जब आपको पुनरावृत्त तर्क पर अधिक नियंत्रण की आवश्यकता होती है।
अनंत अनुक्रम: मूल्यों का एक अंतहीन अनुक्रम उत्पन्न करना, जैसे सेंसर से डेटा।
जेनरेटर:
आलसी मूल्यांकन: बड़े डेटासेट को एक समय में एक आइटम संसाधित करना।
पाइपलाइन: डेटा प्रोसेसिंग पाइपलाइन का निर्माण जो स्ट्रीमिंग तरीके से डेटा को संभालती है।
परिभाषा: जेनरेटर अभिव्यक्ति जेनरेटर बनाने का एक संक्षिप्त तरीका प्रदान करते हैं। वे सूची समझ के समान हैं लेकिन वर्गाकार कोष्ठक के बजाय कोष्ठक का उपयोग करते हैं।
उदाहरण:
gen_exp = (x * x for x in range(5)) for value in gen_exp: print(value)
आउटपुट:
0 1 4 9 16
स्पष्टीकरण: यह जनरेटर अभिव्यक्ति एक जनरेटर बनाती है जो 0 से 4 तक संख्याओं के वर्ग उत्पन्न करती है।
उदाहरण 1: बड़ी फ़ाइलें पढ़ना
def read_large_file(file_path): with open(file_path, 'r') as file: for line in file: yield line for line in read_large_file('large_file.txt'): print(line.strip())
स्पष्टीकरण: यह जनरेटर फ़ंक्शन एक बड़ी फ़ाइल को लाइन दर लाइन पढ़ता है, जिससे एक समय में एक लाइन प्राप्त होती है। यह मेमोरी-कुशल है क्योंकि यह पूरी फ़ाइल को मेमोरी में लोड नहीं करता है।
उदाहरण 2: फाइबोनैचि अनुक्रम
def fibonacci(): a, b = 0, 1 while True: yield a a, b = b, a b fib = fibonacci() for _ in range(10): print(next(fib))
आउटपुट:
0 1 1 2 3 5 8 13 21 34
स्पष्टीकरण: यह जनरेटर फ़ंक्शन फाइबोनैचि संख्याओं का एक अनंत अनुक्रम उत्पन्न करता है। यह दर्शाता है कि मूल्यों के संभावित अनंत अनुक्रम उत्पन्न करने के लिए जनरेटर का उपयोग कैसे किया जा सकता है।
* An iterator is an object that allows you to traverse through all the elements of a collection one at a time, implementing the `__iter__()` and `__next__()` methods.
* A generator is a special type of iterator defined using a function and the `yield` keyword, allowing you to generate values on the fly without storing them all in memory.
* Generators are memory-efficient, as they generate values on the fly. They are useful for processing large datasets, building data pipelines, and working with potentially infinite sequences.
* Generator expressions use parentheses and produce values one at a time, whereas list comprehensions use square brackets and generate the entire list in memory.
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3