局部作用域里的代码可以读外部作用域(包括全局作用域)里的变量,但不能更改它。一旦进行更改,就会将其当成是局部变量。而如果在更改前又进行了读取操作,则会抛出异常。
def f(): x = '1' def g(): x += '2' return x return g print f()()如果要更改外部作用域里的变量,最简单的办法就是将其放入全局作用域,用global关键字引入该变量。
x = '' def f(): global x x = '1' def g(): global x x += '2' return x return g print f()()在Python 2.x中,闭包只能读外部函数的变量,而不能改写它。
def a(): x = 0 def b(): print locals() y = x + 1 print locals() print x, y return b a()()如果要对x进行赋值操作, 在Python 2.x中解决这个问题,目前只能使用全局变量:global
def a(): x = 0 def b(): nonlocal x x += 1 print x return b a()()