Moe*_*Moe 1 python static closures
是否可以在 python 中编写一个函数,它接受一个参数 a 并打印 h+a 的结果,其中 h 是一个局部变量。然后它应该返回自身,h 增加一。
在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>
Run Code Online (Sandbox Code Playgroud)
以前的版本需要伪造它:
>>> 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>
>>>
Run Code Online (Sandbox Code Playgroud)
(ETA:我想我误解了问题的一部分,因为您似乎希望由f(并且返回自身)返回的函数接受参数,但这是一个微不足道的更改。)