Generators is a function in which objects are created at once but not all code is executed at once as done in normal function. In normal function execution from top to the return statement. A function that consists of a yield statement is called a generators function. The execution of the generator function happens differently, in which the code execution stops at the yield statement rather than a return statement, to move to the next statement next() method is called which will start the execution of the code from where it is left over. If no yield statement is found a StopIteration exception is raised.
So lets see how to create, execute a Generators in python.
def fib(n): a, b = 0, 1 while a <= n: yield a # yield statement. a, b = b, a + b
Now let execute the method fib().
fib_fun = fib(10) next(fib_fun) # 0 next(fib_fun) # 1 next(fib_fun) # 1 . . . next(fib_fun) # 8 next(fib_fun) # reached the end will raise StopIteration Error. Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration # Else you can use for loop which call next() in the background. for fib_value in fib(10): print(fib) # Output 0 1 1 2 3 5 8
So here we today understand the Generators concept in python. Now you would be thinking where we can use this, let me state some use cases.
- Can be used for memory management, where we pass the whole list as once, we can use Generator to pass data one by one so that less load comes on memory.
- Generator can be used to define infinite streams.
If you know any more use case, please do share in the comments and if want to share something else or talk about Generators feel free to ping me on twitter
Till then Cheers 🙂