def fibonacci():
a, b = 0, 1
while True: # دنبالهٔ بینهایت — فقط با مولد ممکن است
yield a
a, b = b, a + b
gen = fibonacci()
print([next(gen) for _ in range(7)]) # [0, 1, 1, 2, 3, 5, 8]
سه سطح را قاطی نکن: تکرارپذیر (list — هر بار از اول)، تکرارگر (خروجی iter() — یکبارمصرف و حالتدار)، مولد (تابعِ دارای yield — تکرارگری که تنبل میسازد). عبارتهای مولدی (x*x for x in range(n)) هم همان تنبلی را در یک خط میدهند.