Generators are very useful and can help simplify your code and improve its performance.
simple examples
For example, the RangeGenerator can be used to iterate over a large number of values, without creating a massive list (like range would)
Generators can be composed. Here we create a generator on the squares of consecutive integers.
Here, we compose a square generator with the takewhile generator, to generate squares less than 100