Generators in python

Generators are functions that use yield to produce values lazily, one at a time. They're memory-efficient for large datasets and support iteration protocols. Generator expressions provide a concise syntax similar to list comprehensions.