2.x版本不支持noloacl,闭包各种使用方法如下:
''' 闭包相关的测试 https://stackoverflow.com/questions/3190706/nonlocal-keyword-in-python-2-x http://cndenis.iteye.com/blog/1754743 ''' def outer(): def inner(): inner.y += 1 return inner.y inner.y = 0 return inner def outer2(): d = {'y' : 0} def inner(): d['y'] += 1 return d['y'] return inner def outter3(): x = {} x[0] = 1 def inner(): print("inner is called, x=", x[0]) x[0] = x[0] + 1 print("outter after inner called, x=", x[0]) return inner class C(object): pass def outter4(): x = C() x.v = 1 def inner(): print("inner is called, x=", x.v) x.v = x.v+1 print("outter after inner called, x=", x.v) return inner #2.75闭包中nolocal设置 if __name__ == '__main__': f = outer() g = outer() print(f(), f(), g(), f(), g()) #prints (1, 2, 1, 3, 2) h = outer2() print(h(), h(), h()) # prints 1 2 3 h1 = outter3() print(h1(),h1(),h1()) h2 = outter4() print(h2(), h2(), h2())