Python Generators and Iterators
Ad
Iterators and Generators
Generators produce values lazily, one at a time, instead of building a whole list in memory. Perfect for huge or infinite sequences.
A Generator with yield
def countdown(n):
while n > 0:
yield n
n -= 1
for num in countdown(3):
print(num) # 3, 2, 1
Why It Saves Memory
# List — stores ALL 10 million numbers in RAM
nums = [n for n in range(10_000_000)]
# Generator — stores ONE number at a time
nums = (n for n in range(10_000_000))
Infinite Generators
def infinite_ids():
i = 1
while True:
yield i
i += 1
Reading a Huge File Lazily
def read_lines(path):
with open(path) as f:
for line in f:
yield line.strip()
# Processes a 50GB file with tiny memory
FAQs
Generator vs list — when to use which?
Use a list when you need random access or to reuse data. Use a generator for one-pass, large, or streaming data.
Can I reuse a generator?
No — once exhausted it's done. Create a new one. More in our Python section.
