Iterator प्रोटोकॉल
__iter__ और __next__ को समझें
Iterator प्रोटोकॉल, CoddyKit पर Python Academy का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Python Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Python Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
इटरेशन क्या है
जब भी आप किसी सूची, स्ट्रिंग या डिक्शनरी पर for लूप लिखते हैं, Python पर्दे के पीछे इटरेटर प्रोटोकॉल का उपयोग करता है।
जिस ऑब्जेक्ट पर आप लूप चला सकते हैं, उसे इटरेबल कहा जाता है। जो ऑब्जेक्ट वास्तव में एक-एक करके मान उत्पन्न करता है, उसे इटरेटर कहा जाता है।
for ch in 'abc':
print(ch)iter() और next()
दो अंतर्निहित फ़ंक्शन इटरेशन चलाते हैं:
iter(obj)किसी इटरेबल से उसका इटरेटर माँगता है।next(it)इटरेटर से अगला मान माँगता है।
जब और कोई मान नहीं बचता, तो next() StopIteration उत्पन्न करता है।
it = iter([10, 20, 30])
print(next(it))
print(next(it))
print(next(it))StopIteration
next() को आवश्यकता से एक बार अधिक कॉल करने पर StopIteration उत्पन्न होता है। for लूप इसे अपने-आप पकड़कर सही ढंग से रुक जाता है।
it = iter([1])
print(next(it))
try:
next(it)
except StopIteration:
print('No more items')दो डंडर मेथड
अपना इटरेटर बनाने के लिए आपको दो मेथड लागू करने होते हैं:
__iter__स्वयं इटरेटर ऑब्जेक्ट लौटाता है।__next__अगला मान लौटाता है याStopIterationउत्पन्न करता है।
class Count:
def __init__(self, n):
self.i = 0
self.n = n
def __iter__(self):
return self
def __next__(self):
if self.i >= self.n:
raise StopIteration
self.i += 1
return self.i
for x in Count(3):
print(x)इटरेबल बनाम इटरेटर
किसी इटरेबल को केवल __iter__ की आवश्यकता होती है। किसी इटरेटर को __iter__ और __next__ दोनों की आवश्यकता होती है।
सूचियाँ इटरेबल होती हैं, लेकिन इटरेटर नहीं: iter() का प्रत्येक कॉल नया इटरेटर देता है।
nums = [1, 2, 3]
print(iter(nums) is iter(nums))
it = iter(nums)
print(it is iter(it))इटरेटर केवल एक बार समाप्त होते हैं
किसी इटरेटर का उपयोग केवल एक बार किया जा सकता है। अंत तक पहुँचने के बाद वह खाली ही रहता है। दोबारा लूप चलाने के लिए नया इटरेटर बनाएँ।
it = iter([1, 2])
print(list(it))
print(list(it))रेंज-जैसा इटरेटर
आइए ऐसा कस्टम इटरेटर बनाएँ जो एक सरल काउंटर की तरह व्यवहार करे। ध्यान दें कि स्थिति इंस्टेंस में रहती है।
class EvenUpTo:
def __init__(self, limit):
self.cur = 0
self.limit = limit
def __iter__(self):
return self
def __next__(self):
if self.cur > self.limit:
raise StopIteration
value = self.cur
self.cur += 2
return value
print(list(EvenUpTo(8)))इटरेबल और इटरेटर को अलग करना
अधिक साफ़ डिज़ाइन में कंटेनर और इटरेटर अलग रखे जाते हैं, ताकि कंटेनर पर कई बार लूप चलाया जा सके।
class Bag:
def __init__(self, items):
self.items = items
def __iter__(self):
return BagIterator(self.items)
class BagIterator:
def __init__(self, items):
self.items = items
self.i = 0
def __iter__(self):
return self
def __next__(self):
if self.i >= len(self.items):
raise StopIteration
v = self.items[self.i]
self.i += 1
return v
b = Bag(['x', 'y'])
print(list(b))
print(list(b))डिफ़ॉल्ट के साथ next() का उपयोग
जब इटरेटर खाली हो, तो next(it, default) StopIteration उत्पन्न करने के बजाय डिफ़ॉल्ट मान लौटाता है। सुरक्षित रूप से झाँकने के लिए यह उपयोगी है।
it = iter([42])
print(next(it, 'done'))
print(next(it, 'done'))इटरेटर मेमोरी के लिए अनुकूल होते हैं
इटरेटर एक बार में एक आइटम देते हैं, इसलिए उन्हें पूरी अनुक्रमणिका को मेमोरी में रखने की आवश्यकता नहीं होती। इसी कारण वे बहुत बड़ी या अनंत धाराओं तक भी आसानी से काम करते हैं।
class Naturals:
def __init__(self):
self.n = 0
def __iter__(self):
return self
def __next__(self):
self.n += 1
return self.n
it = iter(Naturals())
print(next(it), next(it), next(it))इटरेटर का उपभोग करने वाले बिल्ट-इन
कई बिल्ट-इन किसी भी इटरेटर को स्वीकार करते हैं: sum, max, min, sorted, list, tuple। वे StopIteration मिलने तक मान लेते रहते हैं।
class Count:
def __init__(self, n):
self.i = 0
self.n = n
def __iter__(self):
return self
def __next__(self):
if self.i >= self.n:
raise StopIteration
self.i += 1
return self.i
print(sum(Count(5)))
print(max(Count(5)))त्वरित जाँच
इटरेटर प्रोटोकॉल की अपनी समझ जाँचिए।
पुनरावलोकन
आपने इटरेटर प्रोटोकॉल सीखा:
iter()एक इटरेटर प्राप्त करता है;next()मान लेता है।StopIterationअंत का संकेत देता है औरforइसे संभाल लेता है।- कस्टम इटरेटर
__iter__और__next__लागू करते हैं। - इटरेटर एक ही बार उपयोग किए जा सकते हैं और मेमोरी की बचत करते हैं।
अब आप Python को yield की मदद से अपने लिए इटरेटर लिखने देंगे।
एआई शिक्षक के साथ Python सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 76
- पाठ
- 320
अक्सर पूछे जाने वाले प्रश्न
क्या “Iterator प्रोटोकॉल” पाठ निःशुल्क है?
हाँ—“Iterator प्रोटोकॉल” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Python Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Python Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“Iterator प्रोटोकॉल” में मैं क्या सीखूँगा?
__iter__ और __next__ को समझें आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Python Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Python Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Python Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।
“Iterator प्रोटोकॉल” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Python Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Python Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- Iterator प्रोटोकॉल
- जनरेटर फ़ंक्शन
- जनरेटर अभिव्यक्तियाँ
- yield from और प्रत्यायोजन