大家怎么用Python 2.x 实现闭包?
解决方案
问题的主要原因在于:
在Python中string, int, float, tuple这些基本类型都是immutable的。即使是如int, float这种"基础"类型,若值不同,会赋值给另外一个PyObject,这点与lua, javascript等语言不一样。
你可以在Python REPL中测试这几行:
i = 1id(i)i = 2 # 改变i的值id(i) # 注意两个id不同
这就是为什么需要使用list, dict的原因(class, function本身也是dict,可以利用上来)。
就你的例子来说,也可以这样写:
def counter(): i = 0 def inner(): inner.i += 1 return inner.i inner.i = i return innerc1 = counter()c2 = counter()print c1()print c1()print c2()print c2()