Python Forum
a generator that computes squares of first 20 natural numbers - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: Homework (https://python-forum.io/forum-9.html)
+--- Thread: a generator that computes squares of first 20 natural numbers (/thread-21467.html)



a generator that computes squares of first 20 natural numbers - mdshamim06 - Oct-01-2019

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 ?


RE: a generator that computes squares of first 20 natural numbers - buran - Oct-01-2019

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