Đôi khi khai báo biến nhưng cần sửa đổi hoặc truy cập giá trị bên ngoài phạm vi khai báo (có thể ở đâu trong chương trình). Trong trường hợp đó, dùng từ khóa global với tên biến bên trong hàm nơi biến được khai báo. Nếu biến không nằm trong hàm, nó tự động có phạm vi toàn cục.
Biến ngoài hàm
Ví dụ dưới đây thấy biến ngoài hàm nhưng truy cập được từ trong hàm. Biến này đã có phạm vi toàn cục.
Ví dụ
x = 56
def func():
y = x * 2
return y
print(func())
Kết quả
112
Biến trong hàm
Ví dụ sau cố gắng thay đổi giá trị biến trong hàm và gặp lỗi.
Ví dụ
x = 56
def func():
y = x * 2
x = x + 2
return y
print(func())
Kết quả
UnboundLocalError: local variable 'x' referenced before assignment
Cách duy nhất để sửa đổi biến toàn cục trong hàm là khai báo nó là global bên trong hàm.
Ví dụ
x = 56
def func():
global x
x = x + 2
y = x * 2
return y
print(func())
Kết quả
116
Biến trong hàm lồng nhau (nested function)
Trong trường hợp hàm lồng nhau, ta tạo biến global ở hàm sâu nhất như ví dụ dưới.
Ví dụ
def func_out():
x = 56
def func_in():
global x
x = 20
print("x là:", x)
x = x + 3
y = x * 2
print("y là:", y)
func_in()
func_out()
print("x là:", x)
Kết quả
x là: 20 y là: 46 x là: 23