Biến Python được tạo khi gán giá trị. Không cần khai báo trước như C.
Global vs Local
x = 141 # Global
def foo():
x = 424 # Local variable mới, che biến global
print(x) # 424
foo()
print(x) # 141 (global không đổi)
Đầu ra
424 141
Từ khóa global
x = 141
def foo():
global x
x = 424 # Sửa biến global
print(x)
foo()
print(x) # 424 (global đã đổi)
Đầu ra
424 424
Từ khóa nonlocal (Python 3)
Dùng cho nested function để sửa biến enclosing scope:
def outer():
x = 1
def inner():
nonlocal x
x = 2
inner()
print(x) # 2
outer()
Best practice
- Biến nên có scope hẹp nhất có thể.
- Hạn chế dùng
global(khó debug, test). - Truyền dữ liệu qua tham số và return value.