Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Quy tắc phạm vi biến (scoping rules) cơ bản trong Python: LEGB

Python tuân theo quy tắc LEGB (từ hẹp đến rộng) để tìm biến:

LEGB Rule

  1. L - Local: Biến định nghĩa trong hàm hiện tại (kể cả tham số).
  2. E - Enclosing: Biến trong hàm bao ngoài (nested function / closure).
  3. G - Global: Biến ở cấp độ module (file), khai báo ngoài mọi hàm.
  4. B - Built-in: Tên có sẵn khi interpreter khởi động (len, print, Exception...).

Ví dụ minh họa

x = "global"  # G

def outer():
    x = "enclosing"  # E
    def inner():
        x = "local"  # L
        print(x)     # Tìm: L -> E -> G -> B
    inner()
    print(x)         # E

outer()
print(x)             # G

Đầu ra

local
enclosing
global

Từ khóa global và nonlocal

  • global x: Khai báo x thuộc scope Global (module).
  • nonlocal x: Khai báo x thuộc scope Enclosing (hàm bao ngoài), không phải Global.
x = 0
def outer():
    x = 1
    def inner():
        nonlocal x
        x = 2
    inner()
    print(x)  # 2 (thay đổi enclosing)
outer()
print(x)      # 0 (global không đổi)

Lưu ý: Gán giá trị cho biến trong hàm tự động tạo biến local, trừ khi khai báo global/nonlocal.