Generators look like a function but there is huge difference b/w generators and function. Instead of return statements you will find only yield statements are used inside of the body of a generator , i.e. one or more yield statements. In short the main feature of generator is that the last execution statement is kept remembered by python interpreter and the next time when the same generator is called the it execute from the last yield location instead of starting the location from TOP. And the state of all local variable(s) are kept safe, that means the local variable(s) will not change their value(s) at next call. Follow the example to understand the concept. def gen(): yield 1 yield 2 yield 3 yield 4 f=gen() print(next(f)) # will print 1 print(next(f)) # will print 2 print(next(f)) # will print 3 Let's take a real example........... -------------------------------...