Các biến khác nhau trong một chương trình Python có phạm vi (scope) khác nhau. Tùy thuộc vào nơi nó được khai báo, biến có thể truy cập được hoặc không bên trong một hàm. Đôi khi chúng ta cần sửa đổi một biến nằm bên trong một hàm từ bên ngoài phạm vi hiện tại của nó. Trong trường hợp đó, chúng ta sử dụng từ khóa global cùng với tên biến.
Dưới đây là các điểm chính về từ khóa global:
- Một biến được khai báo bên ngoài hàm là biến toàn cục (global) theo mặc định.
- Chúng ta sử dụng từ khóa
globalcho một biến nằm bên trong hàm để có thể sửa đổi nó. - Nếu không có từ khóa
global, biến bên trong hàm mặc định là cục bộ (local).
Không sử dụng Global
Trong các ví dụ dưới đây, chúng ta sẽ xem việc thay đổi biến diễn ra như thế nào khi không có từ khóa global. Điều này giúp chúng ta hiểu sự khác biệt mà từ khóa global tạo ra trong chương trình tiếp theo. Trong ví dụ dưới đây, chúng ta cố gắng sửa đổi biến toàn cục bên trong hàm. Nhưng một lỗi xảy ra vì chúng ta không thể sửa đổi biến toàn cục bên trong hàm.
Ví dụ
var = 321
# hàm để sửa đổi biến
def modify():
var = var * 2
print(var)
# gọi hàm
modify()
Kết quả
Chạy mã trên cho kết quả sau:
UnboundLocalError: local variable 'var' referenced before assignment
Sử dụng Global
Bây giờ chúng ta khai báo biến bên trong hàm cùng với từ khóa global. Điều này làm cho biến có thể sửa đổi được.
Ví dụ
var = 321
# hàm để sửa đổi biến
def modify():
global var
var = var * 2
print(var)
# gọi hàm
modify()
Kết quả
Chạy mã trên cho kết quả sau:
642
Global trong hàm lồng nhau (Nested Functions)
Nếu chúng ta phải sử dụng các hàm lồng nhau, thì chúng ta phải khai báo từ khóa global trong hàm nội bộ để biến có thể được sửa đổi.
Ví dụ
def outer_func():
var = 321
# hàm để sửa đổi biến
def modify():
global var
var = var * 2
print(var)
# gọi hàm
modify()
outer_func()
Kết quả
Chạy mã trên cho kết quả sau:
642