用闭包在Python中模拟静态变量
可以在Python里写一个函数,这个函数接收一个参数a,然后打印出h+a的结果,其中h是一个局部变量。接着,这个函数应该返回自己,并把h的值增加1。
2 个回答
5
在Python 3中,你可以这样做:
>>> def f(a):
... h = 1
... def inner():
... 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>
之前的版本需要一些变通的方法:
>>> def f(a):
... h = [1]
... def inner():
... print a + h[0]
... h[0] += 1
... return inner
... return inner
...
>>> f(3)()()()
4
5
6
<function inner at 0x10041f050>
>>>
(补充说明:我想我误解了问题的一部分,因为看起来你想要的是函数f
返回的那个函数(它会返回自己)能够接受参数,不过这只是个小改动。)
2
是的,你可以这样做。
def f(a):
def inner(h, a):
print h+a
return lambda (x): inner(h+1, x)
return inner(1, a)
这是一个例子。
g = f(0) # +1
g = g(0) # +2
g = g(0) # +3
f(0) # +1
g(0) # +4
g(0) # +4
这个会输出结果。
1
2
3
1
4
4
证明完毕。