Python中nonlocal要害字
在这篇文章中先容了“Python的闭包与nonlocal”的用法,因为nonlocal是在Python3.0中新增的要害字,python2.x不提供支持,文中提出在Python2.x办理嵌套函数引用外部变量的要领只有利用global 要害字界说全局变量,另一种可行的办理方案是利用列表或字典取代要操纵的要害字。
示譬喻下:
1.python3.0 利用nonlocal要害字
>>> def outer(): x = 1 def inner(): nonlocal x x = 2 print("inner:", x) inner() print("outer:", x) >>> outer() inner: 2 outer: 2
2.python2.x 借助list或dict实现
>>> def outer(): x = [1] def inner(): x[0] += 1 #修改x[0]生存的值 print("inner:", x[0]) inner() print("outer:", x[0]) >>> outer() inner: 2 outer: 2
更多参考资料:
1. http://stackoverflow.com/questions/1261875/python-nonlocal-statement
2.javascript中浸染域链界说与python浸染域的异同
3.官方文档:
“The nonlocal statement causes the listed identifiers to refer to previously bound variables in the nearest enclosing scope. This is important because the default behavior for binding is to search the local namespace first. The statement allows encapsulated code to rebind variables outside of the local scope besides the global (module) scope.
Names listed in a nonlocal statement, unlike to those listed in a global statement, must refer to pre-existing bindings in an enclosing scope (the scope in which a new binding should be created cannot be determined unambiguously).
Names listed in a nonlocal statement must not collide with pre-existing bindings in the local scope.“