Yield From

This lesson explains the yield from syntax.

We'll cover the following...

Yield From

The yield from syntax was introduced in PEP-380. The stated motivation for introducing the syntax is to enable refactoring of existing code that utilizes yield easier. The yield from syntax is as follows:

yield from <expr> 

The expression must be an iterable from which an iterator is extracted. Let's understand the problem that yield from solves. Consider the following snippet of code:

def nested_generator(): i = 0 while i < 5: i += 1 yield i def outer_generator(): nested_gen = nested_generator() for item in nested_gen: yield item if __name__ == "__main__": gen = outer_generator() for item in gen: print(item) 

The above code has two generator functions. The outer_generator() calls the nested_generator() in a loop and returns values from the inner generator to the main script. You can run the code below and examine the output.

Python 3.5
def nested_generator():
i = 0
while i < 5:
i += 1
yield i
def outer_generator():
nested_gen = nested_generator()
for item in nested_gen:
yield item
if __name__ == "__main__":
gen = outer_generator()
for item in gen:
print(item)

We can refactor the above code and remove the for loop in the outer_generator() as follows, with the same output.

def nested_generator(): i = 0 while i < 5: i += 1 yield i def outer_generator_with_yield_from(): nested_gen =
...