+ 10
Why this code output is 222.
def cm(): return[lambda x:i*x for i in range(3)] for m in cm(): print(m(1),end='') #output=222 ,but why.
2 Answers
+ 3
As we can see function returns something like 'a list of lambdas', so in line:
# for m in cm():
We're taking as though first lambda and assign it to 'm', then:
# print (m(1), end='')
We're calling lambda with argument equals 1. Well, let's check what is going on 2nd line in detail:
# return [lambda x: i*x for i in range(3)]
"""
for i in range(3):
#1 0*1 (i=0 * x=1) = 0
#2 . 1*1 (i=1 * x=1) = 1
#3. 2*1 (i=2 * x=1) = 2
"""
it means that: lambda x(1) = 2, and function will return 2.
As There are 2 lambdas left, the result will be '222'.
+ 2
for I in range (3) creates 3 lambda functions
keep in mind that they are not calculated till 3 lamda functions generated now i=2
and ur pass 1 to x so it's
x:1*2 for three times and as in print line end is not escape char for newline ("\n")
it is "" it prints 222 without newline