Biến toàn cục (Global Variable) là gì?
Biến toàn cục là biến được khai báo ngoài hàm nhưng cần dùng bên trong hàm.
Ví dụ
def func():
print(a)
a = 10
func()Kết quả
10
Ở đây, biến a là toàn cục. Nó được khai báo ngoài hàm và có thể dùng trong hàm. Do đó phạm vi (scope) của biến a là toàn cục.
Xem điều gì xảy ra nếu tạo biến cùng tên với biến toàn cục bên trong hàm.
Trong ví dụ trên, a khai báo ngoài hàm nên là toàn cục.
Nếu khai báo biến khác cùng tên bên trong hàm với giá trị khác. Biến đó sẽ đóng vai trò biến cục bộ (local variable) của hàm và phạm vi chỉ giới hạn trong hàm. Bên ngoài hàm, biến toàn cục vẫn giữ giá trị gốc.
Hiểu rõ hơn qua ví dụ:
Ví dụ
a = 10
def func():
a = 5
print("Trong hàm:", a)
func()
print("Ngoài hàm:", a)Kết quả
Trong hàm: 5 Ngoài hàm: 10
Trong ví dụ trên, a là biến toàn cục giá trị 10. Sau đó gọi func().
Bên trong func(), khai báo biến a khác với giá trị khác, phạm vi chỉ trong hàm. Do đó, khi in a ngoài hàm sau đó, nó vẫn giữ giá trị gốc của biến toàn cục là 10.
Từ khóa: global
Từ khóa global dùng khi cần khai báo biến toàn cục bên trong hàm.
Phạm vi biến bình thường khai báo trong hàm chỉ đến cuối hàm.
Tuy nhiên, nếu muốn dùng biến bên ngoài hàm nữa, dùng từ khóa global khi khai báo biến.
Hiểu sự khác biệt qua ví dụ triển khai.
Ví dụ không dùng global
def func():
a = 5
print("Trong hàm:", a)
func()
print("Ngoài hàm:", a)Kết quả
Trong hàm: 5
Traceback (most recent call last):
print("Ngoài hàm:", a)
NameError: name 'a' is not definedTrong ví dụ trên, giá trị a không truy cập được ngoài hàm vì là biến cục bộ. Do đó, truy cập bên ngoài ném exception.
Dùng từ khóa global
Exception ở ví dụ trên giải quyết được nếu khai báo biến a dùng từ khóa global.
Ví dụ
def func():
global a
a = 5
print("Trong hàm:", a)
func()
print("Ngoài hàm:", a)Kết quả
Trong hàm: 5 Ngoài hàm: 5
Trong ví dụ trên, biến a là toàn cục nên giá trị có thể truy cập ngoài hàm.