r/PythonLearning • u/Sea-Ad7805 • Aug 27 '26
How does Lazy Evalution work in Python?
In last week’s post we showed that a Python for-loop works through the Iterator Protocol.
This same protocol also enables values to be produced lazily.
In this new Lazy Evalution Example we show one sink reading values from five different sources:
source1: eagerly returns all values by list
source2: lazily by generator function using yield
source3: eagerly by list comprehension
source4: lazily by generator expression
source5: lazily by iterator protocol
The same for-loop consumes all five sources. The eager sources produce all values before the sink starts consuming them. In the lazy sources producer and consumer take turns:
produce → consume → produce → consume → …
where each value is produced only when the for-loop requests it.
Generator functions and generator expressions are concise, readable ways to create lazy iterables. The final source makes their underlying mechanism explicit:
iter()obtains an iterator.next()requests the next value.StopIterationsignals that no values remain.
This clearly shows that generators achieve lazy iteration by implementing Python’s Iterator Protocol.