Cách sử dụng biến toàn cục trong Python (Từ khóa toàn cục)
Tìm hiểu cách hoạt động của các biến toàn cục trong Python. Hiểu phạm vi biến, không gian tên cục bộ và toàn cục và cách sửa đổi các biến bằng từ khóa toàn cục.
Tổng quan
Hiểu không gian tên và phạm vi biến là rất quan trọng để viết phần mềm không có lỗi bằng Python. Phạm vi xác định phần nào trong chương trình của bạn có thể truy cập hoặc sửa đổi một biến. Một biến được khai báo bên ngoài tất cả các hàm tồn tại trong phạm vi toàn cục và có thể được đọc ở bất kỳ đâu trong mô-đun.
Tuy nhiên, một vấn đề phát sinh khi một hàm cố gắng sửa đổi (gán lại) một biến toàn cục. Theo mặc định, khi Python nhìn thấy một phép gán bên trong một hàm, nó sẽ coi biến đó là cục bộ của hàm. Nếu bạn cố gắng sửa đổi một biến toàn cục mà không khai báo nó là biến toàn cục, Python sẽ tạo một biến cục bộ có cùng tên, giữ nguyên biến toàn cục (hoặc đưa ra một `UnboundLocalError`).
Để thông báo rõ ràng cho Python rằng bạn muốn sửa đổi một biến trong không gian tên toàn cục thay vì tạo một biến cục bộ, bạn phải khai báo nó bằng từ khóa `global` bên trong hàm. Mặc dù đôi khi việc sử dụng các biến toàn cục là cần thiết nhưng nó thường được coi là một phương pháp không tốt trong thiết kế phần mềm lớn vì nó khiến trạng thái khó theo dõi và gỡ lỗi.
Đầu ra mã & thực thi
Tập lệnh này thể hiện việc đọc các biến toàn cục, bẫy che khuất biến và sửa đổi các biến toàn cục bằng từ khóa toàn cục.
counter = 10 # Global variable
def read_counter():
# Reading a global variable works out-of-the-box
print("Reading global counter:", counter)
def shadow_counter():
# Attempting to assign without 'global' creates a local variable
counter = 20 # Shadowing
print("Inside shadow function:", counter)
def modify_counter():
global counter # Declaring we are writing to global scope
counter = 50
print("Inside modify function:", counter)
read_counter()
shadow_counter()
print("Counter after shadow function:", counter) # Remains 10
modify_counter()
print("Counter after modify function:", counter) # Now 50Reading global counter: 10
Inside shadow function: 20
Counter after shadow function: 10
Inside modify function: 50
Counter after modify function: 50Triển khai từng bước
- Khai báo các biến cần được truy cập trên toàn cầu bên ngoài bất kỳ phạm vi chức năng nào.
- Đọc các biến toàn cục bên trong bất kỳ hàm nào mà không cần thêm các khai báo đặc biệt.
- Sử dụng từ khóa toàn cục (ví dụ: bộ đếm toàn cục) bên trong các hàm nếu bạn cần sửa đổi giá trị biến toàn cục.
- Hạn chế sử dụng biến toàn cục để tránh nhầm lẫn phạm vi và ô nhiễm không gian tên.
Câu hỏi thường gặp
Bóng mờ biến đổi trong Python là gì?
Hiện tượng đổ bóng xảy ra khi một biến được khai báo bên trong phạm vi cục bộ (như hàm) có cùng tên với một biến trong phạm vi toàn cục bên ngoài. Biến cục bộ che giấu biến toàn cục, khiến nó tạm thời không thể truy cập được trong phạm vi đó.
Sự khác biệt giữa từ khóa toàn cầu và không địa phương là gì?
toàn cầu được sử dụng để truy cập các biến được xác định trong phạm vi mô-đun ngoài cùng. nonlocal được sử dụng bên trong các hàm lồng nhau để truy cập các biến được xác định trong phạm vi hàm kèm theo (bên ngoài).
Chủ đề liên quan
Tìm hiểu cách xử lý các ngoại lệ trong Python bằng cách sử dụng các khối thử, ngoại trừ, khác và cuối cùng. Viết mã Python không có lỗi và chống lỗi.
Cách tạo một lớp trong PythonTìm hiểu cách tạo một lớp trong Python. Nắm vững hàm tạo __init__, các phương thức phiên bản, từ khóa self và khởi tạo đối tượng.
Tài nguyên Python được đề xuất
Mở rộng kiến thức của bạn với các hướng dẫn tương tác, bảng ghi chú và so sánh mã có liên quan.
Giải thích về biến và kiểu dữ liệu trong Python
Hiểu các biến Python và các kiểu dữ liệu cốt lõi (chuỗi, số nguyên, số float, boolean). Hướng dẫn đầy đủ cho người mới bắt đầu về gán bộ nhớ trong Python.
Bảng cheat phương thức chuỗi Python
Hướng dẫn tham khảo đầy đủ về thao tác chuỗi Python. Làm chủ định dạng, tìm kiếm, phân tách, thay thế và kiểm tra thuộc tính chuỗi.
Python vs JavaScript: Ngôn ngữ lập trình nào tốt nhất?
So sánh toàn diện giữa Python và JavaScript. Khám phá sự khác biệt về cú pháp, hiệu suất, trường hợp sử dụng (phụ trợ so với giao diện người dùng) và các ví dụ về mã hóa.