在这篇文章中介绍了“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
立即学习“Python免费学习笔记(深入)”;
商品查询功能提供了一个快速查看商品的途径。商品查询分为基本查询和高级查询。基本查询:提供关键字和商品大类两种条件的查询,用户可以只填写关键字或者选择商品大类或者关键字和商品大类都填写来查询商品。高级查询:提供关键字,商品大类,商品小类,商品价格范围四种条件的查询,用户可以任意填写其中一种或几种的查询条件来查询想要了解的商品信息。商品查询功能大大的方便了用户,提高了网站的用户体验。(5)帮助系统模块
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
立即学习“Python免费学习笔记(深入)”;
更多参考资料:
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.“










