目录
- LEGB规则
- 变量的修改
LEGB规则
从Python2.2开始,变量的LGB规则变成了LEGB规则,在嵌套函数内访问函数外层的变量时,它的顺序会是 嵌套函数内 -> 嵌套函数外层 -> 全局变量
a = 1
def foo():
a = 2
def bar():
print(a)
return bar
f = foo()
f()
"""
此时输出时2,若移除foo内的a=2;结果将会是1;可以验证LEGB规则
"""
变量的修改
a = 1
def foo():
a = 2
def bar():
print(a)
a = a+1
return bar
f = foo()
f()
"""
UnboundLocalError: local variable 'a' referenced before assignment
我们仅仅添加了a=a+1就导致了报错,这是因为在嵌套函数内,只能读取嵌套函数以外的变量,若需要修改外层函数变量可以定义nonlocal a or global a在修改之前。
"""