Trong Python, biến toàn cục là những biến được khai báo bên ngoài tất cả các hàm và có phạm vi sử dụng trên toàn bộ chương trình. Ngược lại, biến cục bộ là những biến được khai báo bên trong một hàm và chỉ có thể được sử dụng trong phạm vi của hàm đó.

Nói cách khác, biến cục bộ chỉ có thể truy cập được bên trong hàm mà nó được tạo ra, trong khi biến toàn cục có thể sử dụng ở bất kỳ đâu trong chương trình, kể cả bên trong các hàm.
1. Biến Cục Bộ trong Python
Khai báo và truy cập biến cục bộ
Biến cục bộ trong Python được tạo bên trong một hàm và chỉ có hiệu lực trong hàm đó. Nếu cố gắng truy cập biến này từ bên ngoài, chương trình sẽ báo lỗi.
Ví dụ về khai báo biến cục bộ:
def my_function(): # Biến cục bộ text = "Tôi yêu lập trình Python" print(text) # Gọi hàm my_function()
Kết quả:
Tôi yêu lập trình Python
Nếu cố gắng truy cập biến text
từ bên ngoài hàm, chương trình sẽ gặp lỗi:
def my_function(): text = "Tôi yêu lập trình Python" print("Bên trong hàm:", text) my_function() print(text) # Truy cập biến cục bộ từ ngoài hàm
Lỗi nhận được:
NameError: name 'text' is not defined
2. Biến Toàn Cục trong Python
Biến toàn cục là những biến được khai báo bên ngoài tất cả các hàm, có thể được sử dụng trong toàn bộ chương trình, bao gồm cả bên trong các hàm.
Ví dụ về khai báo biến toàn cục:
# Khai báo biến toàn cục global_text = "Tôi yêu lập trình Python" def my_function(): print("Bên trong hàm:", global_text) my_function() print("Bên ngoài hàm:", global_text)
Kết quả:
Bên trong hàm: Tôi yêu lập trình Python Bên ngoài hàm: Tôi yêu lập trình Python
Biến global_text
được sử dụng cả bên trong và bên ngoài hàm mà không gặp lỗi.
3. Sự khác biệt giữa biến cục bộ và biến toàn cục
Điều gì sẽ xảy ra nếu một biến có cùng tên được khai báo cả ở phạm vi toàn cục và trong một hàm? Python sẽ ưu tiên sử dụng biến cục bộ trong phạm vi hàm đó.
Ví dụ:
# Biến toàn cục text = "Tôi yêu lập trình Python" def my_function(): # Khai báo biến cục bộ có cùng tên text = "Lập trình thật thú vị!" print(text) my_function() print(text)
Kết quả:
Lập trình thật thú vị! Tôi yêu lập trình Python
Hàm my_function()
sử dụng giá trị của biến cục bộ thay vì biến toàn cục.
4. Cập nhật biến toàn cục trong hàm
Nếu cố gắng thay đổi giá trị của biến toàn cục bên trong một hàm mà không sử dụng từ khóa global
, chương trình sẽ báo lỗi:
def my_function(): text += " - Python" print(text) text = "Lập trình với" my_function()
Lỗi nhận được:
UnboundLocalError: local variable 'text' referenced before assignment
Sử dụng từ khóa global
Để thay đổi giá trị của biến toàn cục trong một hàm, chúng ta cần sử dụng từ khóa global
:
text = "Python rất mạnh mẽ!" def my_function(): global text text += " - Một ngôn ngữ lập trình tuyệt vời!" print(text) my_function() print(text)
Kết quả:
Python rất mạnh mẽ! - Một ngôn ngữ lập trình tuyệt vời! Python rất mạnh mẽ! - Một ngôn ngữ lập trình tuyệt vời!
Sau khi thay đổi giá trị trong hàm, biến toàn cục cũng bị thay đổi.
5. Kết hợp biến cục bộ và biến toàn cục
Một biến có thể hoạt động như một biến toàn cục, cục bộ hoặc có thể bị thay đổi bên trong một hàm bằng từ khóa global
.
Ví dụ:
a = 1 # Biến toàn cục def function_1(): print("Bên trong function_1:", a) # Sử dụng biến toàn cục def function_2(): a = 2 # Khai báo biến cục bộ print("Bên trong function_2:", a) def function_3(): global a a = 3 # Thay đổi biến toàn cục print("Bên trong function_3:", a) print("Giá trị ban đầu:", a) function_1() print("Sau function_1:", a) function_2() print("Sau function_2:", a) function_3() print("Sau function_3:", a)
Kết quả:
Giá trị ban đầu: 1 Bên trong function_1: 1 Sau function_1: 1 Bên trong function_2: 2 Sau function_2: 1 Bên trong function_3: 3 Sau function_3: 3
6. Bảng So Sánh Biến Cục Bộ và Biến Toàn Cục
Tiêu chí so sánh | Biến Toàn Cục | Biến Cục Bộ |
---|---|---|
Khai báo | Bên ngoài tất cả các hàm | Bên trong một hàm |
Thời gian tồn tại | Tồn tại trong suốt chương trình | Tồn tại trong phạm vi hàm |
Khả năng truy cập | Có thể truy cập ở mọi nơi | Chỉ có thể truy cập trong hàm |
Chia sẻ dữ liệu | Có thể chia sẻ dữ liệu giữa các hàm | Không thể chia sẻ dữ liệu giữa các hàm |
Cần truyền tham số không? | Không cần | Cần nếu muốn truyền giá trị |
Lưu trữ | Lưu ở vị trí cố định do trình biên dịch quyết định | Lưu trên stack của hàm |
Thay đổi giá trị | Nếu thay đổi, ảnh hưởng đến toàn bộ chương trình | Chỉ ảnh hưởng trong phạm vi hàm |
Kết Luận
- Biến cục bộ chỉ tồn tại trong một hàm và không thể truy cập từ bên ngoài.
- Biến toàn cục có thể được sử dụng ở bất kỳ đâu trong chương trình.
- Nếu muốn thay đổi biến toàn cục trong một hàm, cần sử dụng từ khóa
global
. - Khi một biến có cùng tên xuất hiện cả trong phạm vi toàn cục và cục bộ, biến cục bộ sẽ được ưu tiên trong hàm đó.
Hiểu rõ về biến cục bộ và toàn cục giúp lập trình viên kiểm soát phạm vi biến một cách chặt chẽ, tránh lỗi và viết mã nguồn tối ưu hơn. 🚀