Python Forum

Full Version: a generator that computes squares of first 20 natural numbers
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Problem Statement:

Define two functions f1 and f2 such that,
f1 returns a list of squares of first 20 natural numbers using list comprehension.
f2 returns a generator that computes squares of first 20 natural numbers.
Determine the time taken by each function to get executed 100000 times. Print the time for each function in separate lines.
Hint : Explore timeit module

Answer :

import timeit
def f1():
	f= [i**2 for i in range(1,21)]
	return f
def f2():
	g = (x**2 for x in range(1,21))
	yield g

s1 = timeit.timeit(stmt="f1()",setup="from __main__ import f1",number=100000)
print(s1)
s2 = timeit.timeit(stmt="next(f2())",setup="from __main__ import f2",number=100000)
print(s2)
Can anybody check the answer is correct or not ?
I don't think you need to time calling next(f2()). I would expect to call it the same way as f1(). The idea is to see the difference in timing when creating list in memory and just creating the generator. Also note that they want f2 to return generator, not f2 to be generator

import timeit
def f1():
    f= [i**2 for i in range(1,21)]
    return f
def f2():
    g = (x**2 for x in range(1,21))
    return g
 
s1 = timeit.timeit(stmt="f1()",setup="from __main__ import f1",number=100000)
print(s1)
s2 = timeit.timeit(stmt="f2()",setup="from __main__ import f2",number=100000)
print(s2)
Output:
1.0165985100029502 0.1487332629985758