एक इटरेबल को मोटे तौर पर एक ऑब्जेक्ट के रूप में परिभाषित किया जा सकता है जो बिल्ट-इन मेथड iter() को पास किए जाने पर एक इटरेटर उत्पन्न करेगा। एक ऑब्जेक्ट के इटरेबल होने के लिए कुछ शर्तें हैं, क्लास के ऑब्जेक्ट को दो इंस्टेंस मेथड परिभाषित करने की आवश्यकता है: __len__ और __getitem__। एक ऑब्जेक्ट जो इन शर्तों को पूरा करता है जब उसे मेथड iter() में पास किया जाता है तो एक इटरेटर उत्पन्न करेगा।
इटरेबल को समझने के लिए नीचे दिए गए उदाहरण को समझते हैं -
string = "Tutorialspoint"
for char in string:
print(char)
आउटपुट
T u t o r i a l s p o i n t
उपरोक्त कोड __getitem__(index) मेथड का उपयोग करता है जो इंडेक्स द्वारा निर्दिष्ट स्थिति पर तत्व लौटाएगा।
तो, हमारा उपरोक्त कोड -
- इंडेक्स 0 से शुरू करें
- string.__getitem__(index) कॉल करें
- IndexError उठाया गया? रुकें
- लूप का बॉडी चलाएं
- इंडेक्स बढ़ाएं, चरण 2 पर वापस जाएं।
इटरेटर
इटरेटर को एक ऑब्जेक्ट के रूप में परिभाषित किया जाता है जो आंतरिक स्थिति वेरिएबल के माध्यम से पुनरावृत्ति को गिनता है। इस मामले में वेरिएबल, जब पुनरावृत्ति अंतिम आइटम को पार करती है तो शून्य पर सेट नहीं होता है, बल्कि पुनरावृत्ति के अंत को इंगित करने के लिए StopIteration() उठाया जाता है। इसका अर्थ यह भी है कि इटरेटेड आइटम को केवल एक बार इटरेट किया जाएगा, जैसे नीचे दिए गए उदाहरण में -
my_list = ['itemOne', 'TutorialsPoints']
iterators_of_some_list = iter(my_list)
for i in iterators_of_some_list:
print(i)
for j in iterators_of_some_list: # काम नहीं करता
print(j)
# हालांकि
for k in my_list:
print(k)
for l in my_list: # यह काम करता है
print(l)
आउटपुट
itemOne TutorialsPoints itemOne TutorialsPoints itemOne TutorialsPoints
उपरोक्त कोड सही है क्योंकि इटरेटर पर iter() मेथड स्वयं को लौटाता है (वर्तमान स्थिति को याद रखने के लिए)। तो उपरोक्त हमारे पास "for" के समान लूप कार्यान्वयन का एक प्रकार है जिसे समाप्त करने के लिए।