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

Cách khai báo biến toàn cục (Global Variable) trong Python?


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 defined

Trong 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.