LEGB là thứ tự Python tra một tên: Local (trong hàm hiện tại) → Enclosing (hàm bao ngoài) → Global (module) → Built-in. Tìm thấy ở tầng nào thì dừng ở đó.
Mặc định, gán một tên bên trong hàm sẽ tạo biến Local — che biến cùng tên ở ngoài. Muốn gán ra ngoài phải khai báo:
- global x: gán vào biến ở scope module.
- nonlocal x: gán vào biến ở scope hàm bao gần nhất (closure), không phải module.
python
def outer():
x = 1
def inner():
nonlocal x
x = 2 # sửa x của outer
inner()
return x # 2