Simulate Static Variables In Python With Closures
Is it possible to write a function in python, which takes an argument a and prints the result of h+a where h is a local variable. Then it should return itself, with h increased by
Solution 1:
In python 3, you can do this:
>>>deff(a):... h = 1...definner():...nonlocal h...print(a+h)... h += 1...return inner...return inner...>>>g = f(3) >>>g = g()
4
>>>g = g()
5
>>>g = g()
6
>>>g()()()
7
8
9
<function inner at 0xb71bcd6c>
Previous versions required faking it:
>>>deff(a):... h = [1]...definner():...print a + h[0]... h[0] += 1...return inner...return inner...>>>f(3)()()()
4
5
6
<function inner at 0x10041f050>
>>>
(ETA: I guess I misinterpreted part of the question, since it seems you want the function returned by f
(and that returns itself) to take the argument, but that's a trivial change.)
Solution 2:
Yes, you can
deff(a):
definner(h, a):
print h+a
returnlambda (x): inner(h+1, x)
return inner(1, a)
example
g = f(0) # +1
g = g(0) # +2
g = g(0) # +3
f(0) # +1
g(0) # +4
g(0) # +4
prints
1
2
3
1
4
4
Q.E.D.
Post a Comment for "Simulate Static Variables In Python With Closures"