Python Generators

Generators produce values lazily and retain their execution state between yields. They are useful for processing streams or large collections without materializing every value in memory.