Skip to content

Yield vs return

Return

return keyword implies the output of a function. It stops the function after running.

src.intermediate.yield_vs_return.return_even_numbers(n)

Return even numbers until n (inclusive).

Returns:

Name Type Description
even_numbers list[int]

List of even numbers until n (inclusive).

Source code in src/intermediate/yield_vs_return/yield_vs_return.py
10
11
12
13
14
15
16
17
18
19
20
def return_even_numbers(n: int) -> list[int]:
    """Return even numbers until n (inclusive).

    Returns:
        even_numbers: List of even numbers until n (inclusive).
    """
    numbers: list[int] = []
    for number in range(1, n):
        if number % 2 == 0:
            numbers.append(number)
    return numbers

Yield

yield keyword also returns a value, but a function can yield multiple outputs, so it does not stop the entire function. Yield returns a generator object, which is an iterator. It can be used in loops.

src.intermediate.yield_vs_return.yield_even_numbers(n)

Yield even numbers until n (inclusive).

Returns:

Name Type Description
even_numbers Generator

List of even numbers until n (inclusive).

Source code in src/intermediate/yield_vs_return/yield_vs_return.py
23
24
25
26
27
28
29
30
31
def yield_even_numbers(n: int) -> Generator:
    """Yield even numbers until n (inclusive).

    Returns:
        even_numbers: List of even numbers until n (inclusive).
    """
    for number in range(1, n):
        if number % 2 == 0:
            yield number

You can use yield instead of return when the data size is large, as it doesn't store in memory the entire result, only when function is called. It is an efficient way of producing data that is big or infinite.

src.intermediate.yield_vs_return.yield_fibonacci_numbers()

Yield Fibonacci series.

Returns:

Name Type Description
fibonacci_numbers Generator

List of numbers of the Fibonacci series.

Source code in src/intermediate/yield_vs_return/yield_vs_return.py
34
35
36
37
38
39
40
41
42
43
44
45
46
47
def yield_fibonacci_numbers() -> Generator:
    """Yield Fibonacci series.

    Returns:
        fibonacci_numbers: List of numbers of the Fibonacci series.
    """
    c1, c2 = 0, 1
    count = 0
    while True:
        yield c1
        c3 = c1 + c2
        c1 = c2
        c2 = c3
        count += 1