Making generators with the yield keyword#

Writing iterators is hard. Python makes it easier for you by making it easy to turn a function into a special kind of iterator, called a generator. In principle generators or simple, though there are many nuances that deserve careful attention— read the docs!

Here’s an example generator for the Collatz conjecture:

When you use the yield keyword in a function, Python compiles the function specially so that it will be an iterator. The __next__ method it generates runs your function until the next yield, which provides the next value in the iteration.

There are subtle rules for how yield and return and exceptions interact, particularly because a generator’s return gets translated to a StopIteration exception. If you can, it’s best to avoid mixing yield and return.