Code Explanation:
1) def outer(x):
Defines a function named outer that takes one parameter x.
This is the outer function which will create and return another function.
2) def inner(y):
Inside outer, we define another function inner that takes one parameter y.
inner is a nested function and can access variables from the enclosing scope (outer).
3) return x + y
Body of inner: it returns the sum of x (from the outer scope) and y (its own argument).
Important: x is not a local variable of inner, but inner closes over it — this is the closure behavior.
4) return inner
outer returns the function object inner (not calling it).
At this moment inner carries with it the binding of x that was provided when outer was called.
5) f = outer(5)
Calls outer(5):
A new inner function is created that has x bound to 5.
That inner function object is returned and assigned to f.
So f is now a function equivalent to lambda y: 5 + y (conceptually).
6) print(f(3))
Calls the function stored in f with y = 3.
Inside that inner, x is 5 (from when outer(5) ran), so it computes 5 + 3 = 8.
print outputs:
8
7) print(outer(10)(2))
This is a one-shot call:
outer(10) creates and returns a new inner function with x bound to 10.
Immediately calling (...)(2) invokes that inner with y = 2.
Computes 10 + 2 = 12.
print outputs:
12
Final Output
8
12
Download Book - 500 Days Python Coding Challenges with Explanation


0 Comments:
Post a Comment