Skip to content Skip to sidebar Skip to footer

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"