Open In App

Python | Generator Expressions

In Python, to create iterators, we can use both regular functions and generators. Generators are written just like a normal function but we use yield() instead of return() for returning a result. It is more powerful as a tool to implement iterators. It is easy and more convenient to implement because it offers the evaluation of elements on demand. Unlike regular functions which on encountering a return statement terminates entirely, generators use a yield statement in which the state of the function is saved from the last call and can be picked up or resumed the next time we call a generator function. Another great advantage of the generator over a list is that it takes much less memory. 

In addition to that, two more functions _next_() and _iter_() make the generator function more compact and reliable. Example : 






# Python code to illustrate generator, yield() and next().
def generator():
    t = 1
    print ('First result is ',t)
    yield t
 
    t += 1
    print ('Second result is ',t)
    yield t
 
    t += 1
    print('Third result is ',t)
    yield t
 
call = generator()
next(call)
next(call)
next(call)

Output : 

First result is  1
Second result is 2
Third result is 3

Difference between Generator function and Normal function – 



There are various other expressions that can be simply coded similar to list comprehensions but instead of brackets we use parenthesis. These expressions are designed for situations where the generator is used right away by an enclosing function. Generator expression allows creating a generator without a yield keyword. However, it doesn’t share the whole power of the generator created with a yield function. Example :  




# Python code to illustrate generator expression
generator = (num ** 2 for num in range(10))
for num in generator:
    print(num)

Output : 

0
1
4
9
16
25
36
49
64
81

We can also generate a list using generator expressions : 




string = 'geek'
li = list(string[i] for i in range(len(string)-1, -1, -1))
print(li)

Output: 

['k', 'e', 'e', 'g']

 


Article Tags :