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
- return statement
- 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.
# Write a generator function for a set of positive integers starting from zero
i = 0
while i < n:
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
# for calls next() internally on the generator object
for i in PositiveInts(4):