在Python 2.x中,闭包只能读外部函数的变量,而不能改写它。
举例来说,这样是合法的:
def a():
x = 0
def b():
print locals()
y = x + 1
print locals()
print x, y
return b
a()()而这样是非法的:
def a():
x = 0
def b():
print locals()
y = x + 1
print locals()
x = 1
print x, y
return b
a()()为了解决这个问题,Python 3.x引入了nonlocal关键字
只要在闭包内用nonlocal声明变量,就可以让解释器在外层函数中查找变量名了,例如:
def a():
x = 0
def b():
nonlocal x
x += 1
print x
return b
a()()
本文探讨了Python2.x中闭包的限制及其在Python3.x中的改进。通过使用nonlocal关键字,闭包可以修改外部函数的变量。文章通过具体示例展示了如何利用nonlocal关键字实现变量的改写。
1万+

被折叠的 条评论
为什么被折叠?



