Python Iterator and Iterable Explained in Hindi: A Complete Guide
Python Iterator और Iterable क्या है?
जब भी हम Python में किसी List, Tuple या String पर for loop चलाते हैं, तो परदे के पीछे एक खास मैकेनिज्म काम कर रहा होता है। Python का यही कोर कॉन्सेप्ट कहलाता है — Iterators और Iterables। अगर आप Python में मेमोरी को बचाना और बड़े डेटा पर बिना अटके काम करना चाहते हैं, तो Iterator का वर्किंग मॉडल समझना बेहद जरूरी है।
अगर आपने अभी तक Python Loops और Control Flow या Python Classes & Objects नहीं पढ़ा है, तो उन्हें जरूर देखें। सभी कोड एग्जांपल्स को लाइव रन करने के लिए आप हमारा Online Python Editor & Compiler इस्तेमाल कर सकते हैं।
iter() और next() फ़ंक्शंस, StopIteration एक्सेप्शन, for loop का आंतरिक लॉजिक, स्टेट मेंटेनेंस, और कस्टम Iterator क्लास (__iter__() व __next__()) बनाना सीखेंगे।
Iterable क्या है?
Iterable वह ऑब्जेक्ट होता है जिसके ऊपर हम लूप चला सकते हैं और जिससे एक-एक करके आइटम्स निकाले जा सकते हैं। उदाहरण के तौर पर List, Tuple, String, Set, और Dictionary सभी Iterables हैं।
तकनीकी तौर पर, कोई भी ऑब्जेक्ट जिसके अंदर __iter__() मेथड मौजूद होता है, वह Iterable कहलाता है।
Iterator क्या है?
Iterator वह ऑब्जेक्ट होता है जो असल में एक समय पर एक वैल्यू देता है और अपनी करंट स्टेट (यानी वह किस एलिमेंट पर था) को याद रखता है।
Iterator बनने के लिए किसी भी ऑब्जेक्ट के पास दो खास मेथड्स होने जरूरी हैं, जिन्हें Iterator Protocol कहा जाता है:
__iter__()— जो खुद Iterator ऑब्जेक्ट को रिटर्न करता है।__next__()— जो अगला आइटम रिटर्न करता है और आइटम्स खत्म होने परStopIterationएरर उठाता है।
Iterable vs Iterator: मुख्य अंतर
| विशेषता (Feature) | Iterable | Iterator |
|---|---|---|
| परिभाषा | डेटा का कलेक्शन जिसपर लूप चलाया जा सके | वह ऑब्जेक्ट जो एक-एक करके आइटम निकालता है |
| उदाहरण | List, Tuple, String, Dict | iter(list) से बना ऑब्जेक्ट |
| मेथड सपोर्ट | मुख्य रूप से __iter__() | __iter__() और __next__() दोनों |
| next() का इस्तेमाल | सीधे next() नहीं लगा सकते | next() का इस्तेमाल कर सकते हैं |
| State Memory | पॉइंटर या स्टेट याद नहीं रखता | करंट एलिमेंट की स्टेट याद रखता है |
iter() और next() Built-in Functions
Python में किसी Iterable से Iterator बनाने के लिए हम iter() फ़ंक्शन का इस्तेमाल करते हैं, और आगे का एलिमेंट पाने के लिए next() फ़ंक्शन का उपयोग करते हैं।
Output:
हर बार जब आप next() कॉल करते हैं, Iterator आगे बढ़ता है और अगली वैल्यू लौटाता है।
StopIteration क्या है?
जब Iterator के सारे एलिमेंट्स खत्म हो जाते हैं और हम फिर भी next() कॉल करने की कोशिश करते हैं, तो Python StopIteration नाम का एक्सेप्शन देता है।
Error Message:
यह कोई बग नहीं है, बल्कि Python का तरीका है यह बताने का कि अब डेटा खत्म हो चुका है।
next(iterator, default_value) लिखकर एरर से बच सकते हैं। जैसे: next(my_iter, "Khatam!")।
for Loop और Iterator का अंदरूनी Connection
क्या आपने कभी सोचा है कि for loop में StopIteration एरर क्यों नहीं आता? क्योंकि for loop बैकग्राउंड में यही सब कुछ ऑटोमैटिक करता है:
Output:
Python का for loop असल में iter() बनाकर next() चलाता है और StopIteration आते ही बिना किसी क्रैश के लूप बंद कर देता है।
Iterator अपनी State कैसे Maintain करता है?
Iterator की सबसे बड़ी खूबी यह है कि वह Lazy Evaluation करता है। वह मेमोरी में सारे एलिमेंट्स एक साथ लोड नहीं करता, बल्कि सिर्फ यह याद रखता है कि वह अभी किस नंबर या इंडेक्स पर था। जब आप अगली वैल्यू मांगते हैं, तभी वह वैल्यू कैलकुलेट करके देता है। इससे बहुत बड़े डेटासेट्स में रैम (RAM) की भारी बचत होती है।
Custom Iterator कैसे बनाएं? (__iter__ और __next__)
खुद का कस्टम Iterator बनाने के लिए हमें अपनी Class के अंदर दो स्पेशल मेथड्स लागू करने होते हैं:
__iter__(self): यह हमेशाselfरिटर्न करता है।__next__(self): यह अगली वैल्यू रिटर्न करता है और लिमिट पूरी होने परraise StopIterationकरता है।
Output:
यहाँ हमारी Counter क्लास पूरी तरह एक इटरेटर की तरह काम कर रही है और StopIteration के कारण लूप सही समय पर रुक जाता है।
Common Beginner Mistakes
Iterator सिर्फ एक बार आगे बढ़ता है। एक बार सारे आइटम्स खत्म हो जाने के बाद वह खाली हो जाता है। अगर आपको दोबारा चलना है, तो नया iter() बनाना होगा।
अगर आप __next__() में StopIteration नहीं उठाएंगे, तो for loop कभी रुकेगा ही नहीं और आपका प्रोग्राम हैंग हो जाएगा।
Exercise ?
अगर एक Iterator के सारे एलिमेंट्स खत्म हो चुके हैं और फिर से next() कॉल किया जाए, तो कौन सा एरर आता है?
Beginner Practical Coding Challenge
अब अपने Online Python Editor में इस चैलेंज को पूरा करके टेस्ट करें:
EvenNumbersनाम की एक कस्टम क्लास बनाइए जो कंस्ट्रक्टर में एकmax_limitले।- उस क्लास में
__iter__()और__next__()मेथड्स डिफाइन कीजिए ताकि वह केवल Even Numbers (2, 4, 6...) ही रिटर्न करे। - जब संख्या
max_limitसे ज्यादा हो जाए, तोStopIterationएरर उठाइए। EvenNumbers(10)का ऑब्जेक्ट बनाकरforloop की मदद से 2 से 10 तक के नंबर्स स्क्रीन पर प्रिंट कीजिए।
Quick Revision
| Concept | विवरण |
|---|---|
| Iterable | कलेक्शन जिसपर लूप चले (उदा. List, String, Tuple) |
| Iterator | ऑब्जेक्ट जो next() के जरिए एक-एक एलिमेंट देता है |
| iter() | Iterable को Iterator में बदलने वाला फ़ंक्शन |
| next() | Iterator से अगली वैल्यू निकालने वाला फ़ंक्शन |
| StopIteration | आइटम्स खत्म होने पर आने वाला सिग्नल/एक्सेप्शन |
| __iter__() + __next__() | Python का Iterator Protocol (कस्टम क्लास के लिए) |
FAQ
Python में Iterator और Iterable में क्या फर्क है?
Iterable वह डेटा ढांचा (जैसे List) है जिसके पास सारे एलिमेंट्स होते हैं, जबकि Iterator वह पॉइंटर है जो एक समय में सिर्फ एक एलिमेंट को याद रखता है और आगे बढ़ाता है।
क्या हम किसी List पर सीधे next() लगा सकते हैं?
नहीं, List केवल एक Iterable है। पहले iter(list) करके उसे Iterator बनाना होगा, तभी next() काम करेगा।
Iterator का सबसे बड़ा फायदा क्या है?
मेमोरी की बचत। बड़े डेटासेट्स में लाखों रिकॉर्ड्स को एक साथ RAM में लोड करने के बजाय Iterator एक समय पर केवल एक ही रिकॉर्ड प्रोसेस करता है।
क्या Iterator को reset किया जा सकता है?
नहीं, Iterator केवल आगे की दिशा में एक बार ही चलता है। दोबारा शुरू करने के लिए आपको नया Iterator ऑब्जेक्ट बनाना पड़ता है।
Summary
Iterable = जिसपर लूप चलाया जा सके | Iterator = जो एक-एक करके वैल्यू दे और अपनी स्थिति याद रखे।
इस ट्यूटोरियल में आपने सीखा कि Iterator क्या है, iter() और next() कैसे काम करते हैं, for loop परदे के पीछे कैसे चलता है, और कस्टम क्लासेस में __iter__() व __next__() जोड़कर अपना खुद का Iterator कैसे तैयार किया जाता है।
ऊपर दिया गया EvenNumbers कोडिंग चैलेंज तुरंत सॉल्व करें और अपनी स्किल्स मजबूत करें।
Related Articles
Python code likho, run karo aur practice karo — directly browser mein.

कोई टिप्पणी नहीं:
एक टिप्पणी भेजें