पायथन में इटरेटर

पायथन में इटरेटर

यह लेख पायथन में इटरेटर को समझाता है।

YouTube Video

पायथन में इटरेटर

सारांश

पायथन में, एक इटरेटर सूचि (लिस्ट), ट्यूपल और डिक्शनरी जैसी कलेक्शन के तत्वों को एक-एक करके प्रोसेस करने के लिए एक मूलभूत तंत्र है।

इटरेटर क्या है?

इटरेटर एक ऐसा ऑब्जेक्ट है जो एक-एक करके एलिमेंट्स वापस कर सकता है। पायथन में, कोई ऑब्जेक्ट तभी इटरेटर होता है जब वह निम्न दो शर्तें पूरी करता है:।

  • उसमें एक __iter__() विधि होती है जो स्वयं को लौटाती है।
  • उसमें एक __next__() विधि होती है जो अगला एलिमेंट लौटाती है। जब और कोई एलिमेंट शेष नहीं रहता, तब यह StopIteration उठाता है।
1iterator = iter([1, 2, 3])
2print(next(iterator))  # 1
3print(next(iterator))  # 2
4print(next(iterator))  # 3
5# print(next(iterator))  # StopIteration occurs
  • इस कोड में, iter() फ़ंक्शन का उपयोग किसी सूची को इटरेटर में बदलने के लिए किया जाता है, और next() फ़ंक्शन का उपयोग प्रत्येक तत्व को एक-एक करके प्राप्त और प्रदर्शित करने के लिए किया जाता है।

इटेरेबल से अंतर

इटेरेबल वह ऑब्जेक्ट है जिसमें __iter__() मेथड होती है और जिसे for लूप में इस्तेमाल किया जा सकता है। सूचि (लिस्ट) और ट्यूपल इसका उदाहरण हैं।

1nums = [10, 20, 30]
2it = iter(nums)  # Get an iterator from the iterable
3print(next(it))  # 10
  • यह कोड एक उदाहरण है जिसमें किसी सूची जैसी 'इटेरेबल' से इटेरेटर प्राप्त किया जाता है और next() का उपयोग करके तत्वों को क्रम में प्राप्त किया जाता है।

कैसे जांचें:

1from collections.abc import Iterable, Iterator
2
3nums = [10, 20, 30]
4it = iter(nums)
5
6print(isinstance(nums, Iterable))  # True
7print(isinstance(nums, Iterator))  # False
8print(isinstance(it, Iterator))    # True
  • यह कोड यह पुष्टि करता है कि nums एक इटेरेबल है, लेकिन इटेरेटर नहीं है, जबकि it, जिसे iter(nums) का प्रयोग करके प्राप्त किया गया है, एक इटेरेटर है।

फॉर लूप और इटरेटर के बीच संबंध

पायथन में for लूप आंतरिक रूप से इस प्रकार कार्य करता है:।

1nums = [1, 2, 3]
2iterator = iter(nums)
3while True:
4    try:
5        value = next(iterator)
6        print(value)
7    except StopIteration:
8        break
  • जैसा दिखाया गया है, for लूप इटरेशन के लिए छिपे तौर पर इटरेटर का उपयोग करता है।

कस्टम इटरेटर बनाना

आप कक्षा (class) के जरिए कस्टम इटरेटर बना सकते हैं।

 1class Countdown:
 2    def __init__(self, start):
 3        self.current = start
 4
 5    def __iter__(self):
 6        return self
 7
 8    def __next__(self):
 9        if self.current <= 0:
10            raise StopIteration
11        value = self.current
12        self.current -= 1
13        return value
14
15for num in Countdown(3):
16    print(num)  # 3, 2, 1
  • यह कोड एक कस्टम इटेरेटर को परिभाषित करता है जो Countdown क्लास का उपयोग करते हुए उलटी गिनती करता है और for लूप का उपयोग करके 3 से 1 तक संख्याएँ प्रदर्शित करता है।

इटरेटर और जेनरेटर में अंतर और कब किसका प्रयोग करें

जेनरेटर, इटरेटर के समान कार्यक्षमता प्रदान करते हैं। वे आपको इटरेटर को अधिक संक्षिप्त रूप से परिभाषित करने की सुविधा देते हैं।

1def countdown(n):
2    while n > 0:
3        yield n
4        n -= 1
5
6for i in countdown(3):
7    print(i)  # 3, 2, 1
  • यह कोड एक जनरेटर फ़ंक्शन को परिभाषित करता है जो yield का उपयोग करते हुए उलटी गिनती करता है, और for लूप का उपयोग करके 3 से 1 तक की संख्याएँ प्रदर्शित करता है।

इटरेटर (क्लास) और जेनरेटर (फंक्शन) के बीच अंतर

इटेरेटर (क्लास) और जनरेटर (फंक्शन) के बीच निम्नलिखित अंतर होते हैं:।

विशेषता इटरेटर (क्लास) जेनरेटर (फंक्शन)
परिभाषा __iter__() + __next__() yield का उपयोग करने वाला फंक्शन
स्थिति नियंत्रण मैन्युअल रूप से एट्रीब्यूट्स को संभालना आवश्यक आटोमेटिक रूप से स्टेट को संजोता है
पढ़ने में सुगमता जटिल हो सकता है सरल और स्पष्ट
  • उनकी परिभाषा में अंतर इटरेटर को परिभाषित करने के लिए दो मेथड्स: __iter__() और __next__() को मैन्युअली लिखना पड़ता है। इसके विपरीत, जेनरेटर बस एक ऐसा फंक्शन है जिसमें yield कीवर्ड का उपयोग होता है, जिससे कोड बहुत सरल हो जाता है।

  • स्टेट प्रबंधन में अंतर इटरेटर में आपको वर्तमान स्थिति और प्रगति को स्वयं वेरिएबल्स द्वारा संभालना पड़ता है। जबकि जेनरेटर आंतरिक रूप से अपनी स्थिति स्वचालित रूप से बनाए रखते हैं, जिससे मैन्युअल प्रयास कम हो जाता है।

  • कोड की पठनीयता इटरेटर अक्सर जटिल हो जाते हैं क्योंकि इसमें कई मेथड्स तथा मैन्युअल स्टेट प्रबंधन की आवश्यकता होती है। इसके विपरीत, जेनरेटर सिंपल सिंटैक्स का उपयोग करते हैं, जिससे वे शुरुआती लोगों के लिए भी समझने में आसान होते हैं।

इटरेटर के लिए स्टैंडर्ड लाइब्रेरी: itertools

itertools पायथन की एक मानक लाइब्रेरी है, जो इटरेटर के साथ काम करने के लिए शक्तिशाली टूल्स प्रदान करती है।

1import itertools
2
3for x in itertools.count(10, 2):  # 10, 12, 14, ...
4    if x > 20:
5        break
6    print(x)
  • इसमें cycle, repeat, chain, islice और tee जैसी कई अन्य फंक्शंस भी शामिल हैं।

इटरेटर के उपयोग के उदाहरण

इटेरेटर के उपयोग के उदाहरणों में निम्नलिखित शामिल हैं:।

  • फाइल लाइनों की प्रोसेसिंग: किसी फाइल से लाइन दर लाइन इटरेटर की तरह पढ़ें।
  • मेमोरी-कुशल प्रोसेसिंग: बड़े डेटा को क्रमबद्ध रूप से प्रोसेस करें।
  • अनंत अनुक्रमों का प्रतिनिधित्व: itertools.count() जैसी फंक्शंस का उपयोग करें।

सारांश

  • इटरेटर एक ऐसा ऑब्जेक्ट है जो अगले मान को क्रम से प्राप्त कर सकता है।
  • आप __iter__() और __next__() को परिभाषित करके कस्टम इटरेटर बना सकते हैं।
  • इन्हें स्वतः ही for लूप या next() फंक्शन द्वारा नियंत्रित किया जाता है।
  • जेनरेटर या itertools का इस्तेमाल अधिक कुशल प्रोसेसिंग संभव बनाता है।

इटरेटर का उपयोग करके आप बड़े डेटा को क्रमबद्ध रूप से और मेमोरी-कुशल ढंग से प्रोसेस कर सकते हैं, जिससे स्टेट प्रबंधन और प्रोग्राम के प्रदर्शन में सुधार होता है।

आप हमारे YouTube चैनल पर Visual Studio Code का उपयोग करके ऊपर दिए गए लेख के साथ आगे बढ़ सकते हैं। कृपया YouTube चैनल को भी देखें।

YouTube Video