# Python global, nonlocal 比較
```python=
x, y, z = 1, 1, 1
def outer():
x, y, z = 2, 2, 2
def inner():
global x # 指定在inner區塊內的y 使用的是第1行的變數(全域)
nonlocal y # 指定在inner區塊內的x 使用的是第5行的變數(最接近inner的非區域變數)
# 在inner區塊內的z沒有做特殊處理,指定的是第12行的變數(區域變數)
x, y, z = 3, 3, 3
print("inner:", x, y, z)
inner()
print("outer:", x, y, z)
outer()
print("global:", x, y, z)
```
Error`no binding for nonlocal 'y' found`
```python=
x, y, z = 1, 1, 1
def outer():
global x # global可在這裡使用
# nonlocal y
# nonlocal在這裡使用會出現Error`no binding for nonlocal 'y' found`
# 因為nonlocal必須使用在嵌套結構裡面,必須出現至少三處(非global、非local)的混淆情況下才能使用
x, y, z = 2, 2, 2
def inner():
x, y, z = 3, 3, 3
print("inner:", x, y, z)
inner()
print("outer:", x, y, z)
outer()
print("global:", x, y, z)
```