Generators let a function produce a sequence of values lazily using the yield keyword, without building the entire result set in memory. Calling a generator function returns a Generator object implementing Iterator.
Generators are ideal for processing large datasets, reading big files line by line, or building infinite sequences, since each value is computed only when requested.