Biến toàn cục và biến cục bộ trong Python

Sơ lược Date/Time trong Python

1. Biến toàn cục là gì?

Trong Python, một biến được khai báo bên ngoài hàm hoặc trong phạm vi toàn cục được gọi là biến toàn cục. Điều này có nghĩa, biến toàn cục có thể được truy cập bên trong hoặc bên ngoài hàm.

Biến toàn cục có tên gọi là Global Variable.

Hãy xem một ví dụ về cách tạo một biến toàn cục trong Python.

Global Variable
x = "global"

def foo():
    print("x inside :", x)

foo()
print("x outside:", x)

Khi chạy chương trình này thì kết quả sẽ như sau:

x inside : global
x outside: global

Trong đoạn code trên thì biến x là biến toàn cục bởi nó được khai báo bên ngoài hàm, nằm tại vị trí cấp cao nhất của ứng dụng.  Giống như Javascript, trong hàm có thể sử dụng biến cục bộ mà không cần phải thông qua việc truyền tham số.

Chuyện gì sảy ra nếu bạn cố tình thay đổi giá trị của x bên trong hàm foo()?

x = "global"

def foo():
    x = x * 2
    print(x)
foo()

Khi chạy chương trình thì sẽ bị lỗi như sau:

UnboundLocalError: local variable 'x' referenced before assignment

Lý do tại sao? Tại vì bên trong hàm foo() bạn đã thay đổi giá trị cho biến x nên mặc nhiên nó sẽ hiểu biến x là biệc cục bổ, mà biến cục bộ thì đoạn code x = x * 2 sẽ sai vì biến x chưa được khai báo.

2. Biến cục bộ là gì?

Trong Python biến cục bộ được hiểu là biến được khai báo bên trong hàm hoặc phạm vi cục bộ, những biến này gọi là biến cục bộ.

Biến cục bộ có tên gọi là Local Variable.

Hãy xem ví dụ dưới đây:

def foo():
    y = "local"

foo()
print(y)

Do biến y là biến cục bộ nằm bên trong hàm foo() nên đoạn code print(y) là sai, bạn không thể sử dụng biến cục bộ ở bên ngoài hàm được. 

Chạy lên kết quả sẽ như sau:

NameError: name 'y' is not defined

3. Từ khóa global

Để tường minh trong việc sử dụng biến cục bộ ở trong hàm thì Python cung cấp từ khóa global, khi khai báo từ khóa nào cho một biến bất kì thì trình biên dịch sẽ tự hiểu biến đó sẽ trỏ tới một biến cục bộ nằm bên ngoài hàm.

Xem thêm: Anonymous/Lambda Function trong Python

Ví dụ: Sử dụng từ khóa global

x = "global"

def foo():
    global x
    y = "local"
    x = x * 2
    print(x)
    print(y)
    
foo()

Chạy lên kết quả sẽ như sau:

global global 
local

Nếu ở ví dụ ở phần 1 bị sai vì ta đã thay đổi giá trị cho biến x thì trong ví dụ này lại đúng, tại sao? Tại vì ta đã sử dụng từ khóa global để trỏ đến biến cục bộ bên ngoài.

4. Lời kết

Khó khăn nhất là việc khai báo trùng tên ở biến toàn cục và biến cục bộ, vì vậy lời khuyên bạn nên sử dụng biến một cách khoa học, khai báo bằng tham số truyền vào nếu muốn sử dụng biến toàn cục ở bên trong hàm.

Như vậy là mình đã giới thiệu xong khái niệm về biến cục bộ và biến toàn cục trong Python, hy vọng bạn sẽ hiểu ý nghĩa của từng loại biến để sử dụng cho đúng mục đích.

Leave a Reply

Your email address will not be published. Required fields are marked *