Iterators & Generators
Infinite Iterators
Creating and managing infinite sequences — generators and itertools functions that produce values forever, with strategies for safe consumption.
Interview: Tests understanding of lazy evaluation and how to safely work with unbounded data streams.
Infinite iterators produce values forever without exhausting. They're useful for ID generation, cycling through options, streaming data, and mathematical sequences. The key challenge is consuming them safely — always use islice(), takewhile(), or explicit break conditions.
itertools Infinite Iterators
count(start=0, step=1)— counts forever: start, start+step, start+2*step, ...cycle(iterable)— repeats the iterable endlesslyrepeat(object, times=None)— yields the same object forever (or N times)
Custom Infinite Generators
- Any generator with
while Trueis potentially infinite - Prime number generators, random data, timestamp streams
- Always pair with a termination mechanism: islice, takewhile, or break
Safe Consumption Strategies
islice(gen, n)— take exactly n itemstakewhile(pred, gen)— take items while condition is truezip(gen, finite_iterable)— stops when the finite iterable ends- Explicit counter or break condition in a for loop
Warning
Never call list() on an infinite iterator — it will run forever and crash your program with a MemoryError. Always use a finite consumption pattern.
Use Cases
ID generation — unique identifiers for records, sessions, or requests
Streaming data — processing real-time feeds without buffering
Round-robin scheduling — cycling through workers, servers, or resources
Mathematical sequences — primes, Fibonacci, powers for algorithms
Testing — generating infinite test data for fuzzing or load testing
Common Mistakes
Calling list() on infinite iterator — runs forever, crashes with MemoryError
Forgetting to use islice/takewhile — the for loop never terminates
Using zip with an infinite iterator as the only argument — never stops
Not handling StopIteration in custom generators — return instead of raising
Building up state in infinite generators — memory grows without bound