पायथन इटरेटर्स
पायथन इटरेटर्स
एक पुनरावर्तक एक वस्तु है जिसमें मूल्यों की एक गणनीय संख्या होती है।
एक पुनरावर्तक एक वस्तु है जिसे पुनरावृत्त किया जा सकता है, जिसका अर्थ है कि आप सभी मूल्यों के माध्यम से पार कर सकते हैं।
तकनीकी रूप से, पायथन में, एक इटरेटर एक ऑब्जेक्ट है जो इटरेटर प्रोटोकॉल को लागू करता है, जिसमें विधियों __iter__()
और __next__()
.
Iterator बनाम Iterable
सूचियाँ, टुपल्स, शब्दकोश और सेट सभी चलने योग्य वस्तुएँ हैं। वे चलने योग्य कंटेनर हैं जिनसे आप एक पुनरावर्तक प्राप्त कर सकते हैं।
इन सभी वस्तुओं में एक iter()
विधि है जिसका उपयोग पुनरावर्तक प्राप्त करने के लिए किया जाता है:
उदाहरण
टुपल से एक पुनरावर्तक लौटाएं, और प्रत्येक मान को प्रिंट करें:
mytuple = ("apple", "banana", "cherry")
myit = iter(mytuple)
print(next(myit))
print(next(myit))
print(next(myit))
यहां तक कि तार भी चलने योग्य वस्तुएं हैं, और एक पुनरावर्तक वापस कर सकते हैं:
उदाहरण
स्ट्रिंग्स भी चलने योग्य वस्तुएं हैं, जिनमें वर्णों का अनुक्रम होता है:
mystr = "banana"
myit = iter(mystr)
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
एक इटरेटर के माध्यम से लूपिंग
हम for
एक पुनरावृत्त वस्तु के माध्यम से पुनरावृति करने के लिए लूप का उपयोग भी कर सकते हैं:
उदाहरण
एक टपल के मूल्यों को पुनरावृत्त करें:
mytuple = ("apple", "banana", "cherry")
for x in mytuple:
print(x)
उदाहरण
एक स्ट्रिंग के पात्रों को पुनरावृत्त करें:
mystr = "banana"
for x in mystr:
print(x)
लूप वास्तव में for
एक इटरेटर ऑब्जेक्ट बनाता है और प्रत्येक लूप के लिए अगली () विधि निष्पादित करता है।
एक इटरेटर बनाएं
एक वस्तु/वर्ग को एक पुनरावर्तक के रूप में बनाने के लिए आपको विधियों
__iter__()
और
__next__()
अपनी वस्तु को लागू करना होगा।
जैसा कि आपने पायथन क्लासेस/ऑब्जेक्ट्स चैप्टर में सीखा है, सभी क्लासेस में एक फंक्शन होता है
, जिसे कहा जाता है __init__()
, जो आपको ऑब्जेक्ट बनाते समय कुछ इनिशियलाइज़ करने की अनुमति देता है।
विधि समान कार्य करती है , __iter__()
आप संचालन (प्रारंभ करना आदि) कर सकते हैं, लेकिन हमेशा पुनरावर्तक ऑब्जेक्ट को वापस करना होगा।
विधि आपको संचालन करने की __next__()
भी अनुमति देती है, और अनुक्रम में अगला आइटम वापस करना होगा।
उदाहरण
एक पुनरावर्तक बनाएं जो 1 से शुरू होकर संख्याएं लौटाता है, और प्रत्येक अनुक्रम एक से बढ़ जाएगा (1,2,3,4,5 आदि लौटाते हुए):
class MyNumbers:
def __iter__(self):
self.a =
1
return self
def __next__(self):
x = self.a
self.a += 1
return x
myclass = MyNumbers()
myiter = iter(myclass)
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
स्टॉप इटरेशन
उपरोक्त उदाहरण हमेशा के लिए जारी रहेगा यदि आपके पास पर्याप्त अगला() कथन था, या यदि इसे
for
लूप में उपयोग किया गया था।
पुनरावृत्ति को हमेशा के लिए चलने से रोकने के लिए, हम
StopIteration
कथन का उपयोग कर सकते हैं।
विधि में __next__()
, हम एक त्रुटि उत्पन्न करने के लिए एक समाप्ति स्थिति जोड़ सकते हैं यदि पुनरावृत्ति एक निर्दिष्ट संख्या में की जाती है:
उदाहरण
20 पुनरावृत्तियों के बाद रुकें:
class MyNumbers:
def __iter__(self):
self.a =
1
return self
def __next__(self):
if self.a <= 20:
x = self.a
self.a += 1
return x
else:
raise StopIteration
myclass =
MyNumbers()
myiter = iter(myclass)
for x in myiter:
print(x)