Chapter 6. Generators and Coroutines – Infinity, One Step at a Time
A generator is a specific type of iterator that generates values through a function. While traditional methods build and return a list
of items, a generator will simply yield
every value separately at the moment when they are requested by the caller. This method has several benefits:
- Generators pause execution completely until the next value is yielded, which makes them completely lazy. If you fetch five items from a generator, only five items will be generated, so no other computation is needed.
- Generators have no need to save values. Whereas a traditional function would require creating a
list
and storing all results until they are returned, a generator only needs to store a single value. - Generators can have infinite size. There is no requirement to stop at a certain point.
These benefits come at a price, however. The immediate results of these benefits are a few disadvantages:
- Until you are done processing...