来自Google风格指南关于词法作用域的解释:
嵌套的Python函数可以引用封闭函数中定义的变量,但不能对其进行赋值。
这两点起初似乎都没有问题:
# Reference
def toplevel():
a = 5
def nested():
print(a + 2)
nested()
return a
toplevel()
7
Out[]: 5
# Assignment
def toplevel():
a = 5
def nested():
a = 7 # a is still 5, can't modify enclosing scope variable
nested()
return a
toplevel()
Out[]: 5
那么,为什么在嵌套函数中同时使用引用和赋值会导致异常?
# Reference and assignment
def toplevel():
a = 5
def nested():
print(a + 2)
a = 7
nested()
return a
toplevel()
# UnboundLocalError: local variable 'a' referenced before assignment
print(a+2);a=7
这个组合不起作用,但是a=7;print(a+2)
这个组合可以。 - DjaouadNM