Try   HackMD

Python global, nonlocal 比較

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)

Errorno binding for nonlocal 'y' found

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)