在这篇文章中介绍了“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.官方文档: