## generate fibonacci numbers upto n
def fib(n):

    p, q = 0, 1
    while(p < n):
        yield p
        p, q = q, p + q

x = fib(10) # create generator object

## iterating using __next__(), for Python2, use next()

x.__next__() 
# output => 0

x.__next__() 
# output => 1

x.__next__() 
# output => 1

x.__next__() 
# output => 2

x.__next__() 
# output => 3

x.__next__() 
# output => 5

x.__next__() 
# output => 8

# x.__next__() 
# error

## iterating using loop

for i in fib(10):
    print(i) 
# output => 0 1 1 2 3 5 8