1.3.10 · HinglishPython Intermediate

Iterators — `__iter__`, `__next__`, StopIteration

1,767 words8 min readRead in English

1.3.10 · Coding › Python Intermediate


YEH exist kyun karta hai?

YEH problem kya solve karta hai: for x in something: lists, files, dictionaries, ranges, aur aapke apne objects pe uniformly kaise kaam kar sakta hai — bina for ke unke internals jaane? Jawab: yeh sab ek hi chhote se iterator protocol ko speak karne pe raazi hote hain.


Protocol (first principles se)

Toh: iterable = "Main tumhe ek naaya tape player de sakta hoon." Iterator = "Main hi tape player hoon; mera button dabaao."

Figure — Iterators — `__iter__`, `__next__`, StopIteration

Scratch se kaise banate hain


Iterable ≠ Iterator (key separation)


Common Mistakes (Steel-manned)


80/20 core


Recall Feynman: 12-saal ke bachchhe ko explain karo

Ek Pez candy dispenser imagine karo. Aap upar dabaate ho (next) aur ek candy bahar aati hai. Dabaate aur khaate raho. Jab khaali ho jaata hai, dabaane pe ek chhoti si click aati hai jiska matlab hai "sab khatam" (StopIteration) — isliye tumhara dost (for loop) jaanta hai ki poochhna band karo. Dispenser khud iterator hai. Candy ki ek thaili list jaisi hai: woh khud dispenser nahi hai, lekin jab bhi share karna ho toh tum us se ek fresh dispenser nikal sakte ho — yahi kaam __iter__ list ke liye karta hai: woh tumhe har baar ek naya dispenser deta hai.


Connections

  • Generators — yield, lazy evaluation — generators tumhare liye yeh protocol automatically implement karte hain.
  • for loops and comprehensions — hood ke neeche iter/next pe bane hain.
  • itertools — islice, count, chain — composable iterators, infinite waalon ko safely handle karna.
  • Lazy evaluation and memory efficiency — iterators ke peeche ka WHY.
  • Dunder (magic) methods__iter__/__next__ is family ka hissa hain.
  • StopIteration and PEP 479 — generators ko kyun return karna chahiye, raise nahi.

Flashcards

Iterator protocol mein kaun se do methods define hote hain?
__iter__ (iterator return karta hai) aur __next__ (agla item return karta hai / StopIteration raise karta hai).
Iterator ka __iter__ kya return karta hai?
self.
Iterable aur iterator mein kya difference hai?
Iterable mein __iter__ hoti hai jo iterator return karti hai; iterator mein __next__ hoti hai aur aage badhne par consume hota hai.
for x in obj internally kaise kaam karta hai?
it = iter(obj); try mein next(it) loop karo, StopIteration pakad ke break karo.
Ek iterator kaise signal karta hai ki woh exhaust ho gaya hai?
Woh StopIteration raise karta hai.
next(it, default) kya karta hai?
Exhaust hone par StopIteration raise karne ki jagah default return karta hai.
Lists apne khud ke iterators kyun nahi hote?
Taaki har iter(list) ek independent position de sake, jisse nested/independent loops ho sakein.
Reusable iterable ke __iter__ ko ek NAYA iterator kyun return karna chahiye?
Warna shared state exhaust ho jaati hai aur dobara loop karne par kuch nahi milta.
Haath se likhe __next__ mein iteration kaise rokein?
raise StopIteration (return nahi).
Generator ke andar kaise rokein — aur StopIteration raise kyun nahi karte?
return use karo; PEP 479 ke baad se leaked StopIteration RuntimeError ban jaati hai.

Concept Map

problem

solved by

defines

defines

has __iter__ returns

has __next__ returns

__iter__ returns

when exhausted

sugar for

catches

means

implements

List stores all in memory

Need lazy on-demand values

Iterator protocol

Iterable

Iterator

Next item

itself

raise StopIteration

for x in obj

iter then next in loop

loop stops quietly

Countdown class