पायथन में इटरेटर
यह लेख पायथन में इटरेटर को समझाता है।
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 चैनल को भी देखें।