Code Explanation:
1️⃣ Creating an Empty List
funcs = []
An empty list named funcs is created.
It will store the lambda functions.
Initially:
funcs = []
2️⃣ Starting the for Loop
for i in range(3):
range(3) produces:
0, 1, 2
So the loop runs three times:
First iteration → i = 0
Second iteration → i = 1
Third iteration → i = 2
3️⃣ Creating the Lambda Function
funcs.append(lambda: i)
A lambda function is created and added to the list.
The lambda is equivalent to:
def f():
return i
Important Trick ⚠️
The lambda does not immediately store the current value of i.
It remembers the variable i itself.
This is called late binding.
4️⃣ First Iteration
When:
i = 0
this function is added:
lambda: i
But it does not permanently store 0.
The function keeps a reference to the variable i.
5️⃣ Second Iteration
Now:
i = 1
Another lambda is added.
Again, it refers to the same loop variable i.
So the list now contains two functions that both refer to i.
6️⃣ Third Iteration
Now:
i = 2
A third lambda is added.
Again, it refers to the same variable i.
After the loop finishes:
i = 2
This is the key to the output.
7️⃣ Calling the Functions
[f() for f in funcs]
This calls each lambda in the list.
There are three functions:
f₁()
f₂()
f₃()
But all three functions look up the value of the same variable i.
After the loop, i is:
2
Therefore:
f₁() → 2
f₂() → 2
f₃() → 2
8️⃣ List Comprehension Result
The list comprehension collects those results:
[2, 2, 2]
๐ฏ Final Output
[2, 2, 2]

0 Comments:
Post a Comment