Yield statement in Python

How the yield statement and the generator function work in Python?

  • A python function with a yield statement is called a generator function.

 

  • Generator functions has yield expressions in their function body that produce a series of values in a for loop or one value at a time while calling the __next__() method.

 

  • What a generator function generates?
    • When a generator function is invoked no code in the generator function is executed.
    • It simply returns a generator iterator object.

     

  • Each time the __next__() method of a generator iterator object is called - the generator function is executed
  • Till the yield statement

                                    or

  • return statement

                                    or

  • End of the generator function

       

  • The moment the yield statement in the generator function is executed the state of the function is maintained and the value of the expression list is

returned to the caller -  the caller who called the __next__() on generator iterator object.

     

  • Think of yield statement as just another external call to a function.

   

  • After returning the expression list the execution of the generator function continues till a return, end of the function.

 

  • As per Python's iterator protocol, each invocation of __next__() should return one value from the iterable/collection - which is what we get from the iterator object obtained from the generator function.

 

Example:

 

# Write a generator function for a set of positive integers starting from zero

def PositiveInts(n):

    i = 0

    while i < n:

        yield i  

        i = i +1

 

# Obtain a generator object

generatorObject =  PositiveInts(2)      

 

# call next() on generator object every time you need a value from the generator function

print(generatorObject.__next__())

print(generatorObject.__next__())

 

print("======================")

# for calls next() internally on the generator object

for i in PositiveInts(4):

    print(i)

 

Output:

0

1

======================

0

1

2

3

 

 


Copyright 2024 © pythontic.com