python 变量的作用域
变量作用域的LEGB原则
Local(function) Enclosing function locals Gobal(module) Built-in(Python)
E 的说明
In [2]: def f1():
...: x = 100
...: def f2():
...: def f3():
...: def f4():
...: print(x)
...: f4()
...: f3()
...: f2()
...:
In [3]: f1()
100
python3 nonlocal变量
nonlocal 语句的主要作用是允许嵌套的作用域中的名称被修改,而不只是被引用.
程序角度是保存多个副本.
In [1]: def tester(start):
...: state = start
...: def nested(label):
...: nonlocal state
...: print(label, state)
...: state += 1
...: return nested
...:
In [2]: F = tester(0)
In [3]: F = tester(0)
In [4]: F('d')
d 0
In [5]: F('d')
d 1
In [6]: F('d')
d 2
In [7]: F('d')
d 3
注意问题
当执行一条nonlocal语句时,nonlocal名称一定在一个嵌套的def作用域中assigin过,否则则会报错
def tester(start):
def nested(label):
nonlocal state
state = 0
print(label, state)
return nested
SyntaxError: no binding for nonlocal 'state' found