# What is yield and yield from in Python (#dev #python)

## Overview

In this post, we’ll talk about the `yield`

and `yield from`

keywords in Python. We’ll see how they work, and how you can
use them to create generators and coroutines.

## What is yield in Python?

Well, it’s basically the same as in C# or other programming languages…

*Queue the theme for The Office!*

Just kidding! 😂 The yield keyword in Python is used to create a generator, which we talked about in length here.

So a quick recap:

```
def infinite_numbers():
i = 0
while True:
yield i
i += 1
for number in infinite_numbers():
print(number)
```

In the example above, we’re creating a generator that will yield an infinite number of integers.
The `yield`

keyword is used to return a value from the generator, and it will pause the execution of the generator until
the next time it’s called.

## And what about yield from?

It is almost the same thing, but you can use it to delegate the yield to another generator. Example:

```
def even_numbers(n):
for i in range(n):
if i % 2 == 0:
yield i
def odd_numbers(n):
for i in range(n):
if i % 2 != 0:
yield i
def all_numbers(n):
yield from even_numbers(n)
yield from odd_numbers(n)
for number in all_numbers(10):
print(number)
```

In the example above, we have three generators: `even_numbers`

, `odd_numbers`

, and `all_numbers`

.
The `all_numbers`

generator uses the `yield from`

keyword to delegate the yield to the `even_numbers`

and `odd_numbers`

generators.

Note:If even_numbers runs forever, then all_numbers will never execute the odd_numbers generator.

If you need fine control over the execution of the generators, you can try using zip and iterating over both generators,
or using the next method to manually iterate over the generators. However, if you just want to return the values from
each generator, `yield from`

is the way to go.

Without the `yield from`

keyword, we would have to iterate over the `even_numbers`

and `odd_numbers`

generators, like
this:

```
def all_numbers(n):
for number in even_numbers(n):
yield number
for number in odd_numbers(n):
yield number
```

The `yield from`

keyword makes the code cleaner and easier to read.

And that’s it! Hope that helps! :)