## DEV Community is a community of 905,285 amazing developers

We're a place where coders share, stay up-to-date and grow their careers.

# Day 23 of 100DaysOfCode: Simple Code On Python Generator

Today is my 23 day of #100DaysOfCode and #python. Like yesterday today I also revised python for everybody from coursera and learned more about basic of python.

I had tried to write some code in mathematical problem regarding to python. Today I have start to learn about python generator. Try to write some simple code on python generator. I found python generator are similar to python function but there are some dissimilarity of them.

# Simple Code On Python Generator

Simply speaking a generator is a function that return an object(iterator) which we can iterate over one value at a time. It is fairly simple to create a generator in python .It is as easy as defining a normal functions, but with a yield statement instead of return statement .

``````def my_gen():
n = 1
print('This is printed first')
yield n

n += 1
print('This is printed second')
yield n

n += 1
print('This is printed at last')
yield n

for item in my_gen():
print(item)
``````

If a function contains at least one yield statement (it may contain other yield or return statements) it become a generator function. Both yield and return will return some value from a function.

The difference is that while a return statement terminates a function entirely, yield statement pauses the function saving all its states and later continues from there on successive call.

``````def rev_str(my_str):
length = len(my_str)
for i in range(length - 1, -1, -1):
yield my_str[i]
for char in rev_str("hello"):
print(char)
``````

Once the function yields, the function is paused and the control is transferred to the caller. Local variable and their states are remembered between successive calls. Finally , when the function terminates, stopIteration is raised automatically on further calls.

``````a = my_gen()
next(a) ,next(a), next(a)
``````

When this code is run it gives following output.

``````This is printed second
This is printed at last
---------------------------------------------------------------------------
StopIteration                             Traceback (most recent call last)
<ipython-input-57-b3ab980ac96b> in <module>
----> 1 next(a) ,next(a), next(a)

StopIteration:
``````

Day 23 of #100DaysOfCode and #Python
* Revised Python Basic
* Did some code in mathematical problem regarding to python