Code Explanation:
1. Defining the Outer Function
def outer():
count = [0]
This is a function named outer.
Inside it, a list count = [0] is defined.
We use a list instead of an integer because lists are mutable and allow nested functions (closures) to modify their contents.
2. Defining the Inner Function
def inner():
count[0] += 1
return count[0]
inner() is defined inside outer(), so it forms a closure and can access the count list from the outer scope.
count[0] += 1: This increases the first (and only) element of the list by 1.
It then returns the updated value.
3. Returning the Inner Function (Closure)
return inner
The outer() function returns the inner() function — not executed, just the function itself.
This returned function will remember the count list it had access to when outer() was called.
4. Creating Two Independent Closures
f1 = outer()
f2 = outer()
f1 is assigned the result of outer() — which is the inner function with its own count = [0].
f2 is another independent call to outer(), so it also gets its own count = [0].
Each closure (f1 and f2) maintains its own separate state.
5. Printing the Results of Function Calls
print(f1(), f1(), f2(), f1(), f2())
Let’s evaluate each call:
f1() → increases f1’s count[0] from 0 to 1 → returns 1
f1() → count[0] becomes 2 → returns 2
f2() → its own count[0] becomes 1 → returns 1
f1() → count[0] becomes 3 → returns 3
f2() → count[0] becomes 2 → returns 2
Final Output:
1 2 1 3 2
.png)

0 Comments:
Post a Comment