Biến là khái niệm quan trọng và phổ biến trong lập trình. Biến là vùng chứa lưu trữ dữ liệu. Biến có thể lưu nhiều loại: tên người dùng, email, vật phẩm trong kho game online...
Khi lập trình Python, bạn gặp 2 loại biến: global (toàn cục) và local (cục bộ). Hướng dẫn này thảo luận khác biệt, cách hoạt động, và cách dùng trong code.
Biến Python
Trong Python, biến cho phép gán nhãn và lưu trữ dữ liệu. Khi định nghĩa biến, đặt tên cho nó. Dùng tên đó sau trong code để truy xuất dữ liệu. Biến lưu được string, number, list, hoặc bất kỳ kiểu dữ liệu nào.
Ví dụ: xây game, lưu tên người dùng. Thay vì gõ tên đi gõ lại, dùng biến lưu trữ.
name = "Carlton Hernandez"
Khai báo biến name gán giá trị "Carlton Hernandez".
Bây giờ có thể thao tác biến. Ví dụ đổi tên user:
name = "Carlton Hernandez" name = "Carlton Lewis Hernandez"
Dòng 1 gán "Carlton Hernandez". Dòng 2 gán "Carlton Lewis Hernandez". Gán giá trị mới → ghi đè giá trị cũ.
Biến Toàn Cục (Global Variables)
Python có 2 loại biến chính: local và global.
Biến toàn cục: khai báo ngoài hàm. Có phạm vi toàn cục (global scope). Truy cập được khắp chương trình, kể cả bên trong hàm.
Minh họa trực quan:
Biến Toàn Cục Và Cục Bộ Trong Python
Biến toàn cục truy cập được khắp chương trình.
Ví dụ biến toàn cục:
name = "Carlton Hernandez"
Khai báo xong, dùng khắp code. Tạo hàm in giá trị biến toàn cục name:
def printName():
print(name)
printName()
Kết quả: "Carlton Hernandez".
Khởi tạo hàm printName(). Khi gọi, in giá trị biến name ra console.
Biến Cục Bộ (Local Variables)
Biến cục bộ: khai báo bên trong hàm. Có phạm vi cục bộ (local scope). Chỉ truy cập được trong hàm khai báo nó.
Minh họa lại sơ đồ:
Biến Toàn Cục Và Cục Bộ
Biến cục bộ chỉ truy cập được trong hàm cụ thể.
Ví dụ chương trình dùng biến cục bộ:
def printName():
name = "Georgia Anderson"
print(name)
printName()
Kết quả: "Georgia Anderson".
Code: khai báo hàm printName(). Bên trong, định nghĩa biến name. Vì khai báo trong hàm → biến cục bộ.
Cuối code, gọi hàm printName(). Chương trình thực thi hàm.
Biến name cục bộ trong printName(). Không thể truy cập bên ngoài hàm. Xem gì xảy ra khi in biến cục bộ name ngoài hàm:
def printName():
name = "Georgia Anderson"
print(name)
printName()
print(name)
Kết quả: NameError: name 'name' is not defined.
Không thể truy cập biến cục bộ ngoài hàm khai báo. Thử truy cập trong main program → lỗi.
Sử Dụng Cả Biến Toàn Cục Và Cục Bộ
Chương trình có thể dùng cùng tên biến cho cả local và global. Trong trường hợp này, biến local đọc trong local scope, biến global đọc trong global scope.
Ví dụ chương trình có local và global cùng tên:
score = 5
def calculateScore():
score = 10
print("Final Score:", score)
calculateScore()
print("Initial Score:", score)
Kết quả: Final Score: 10 / Initial Score: 5.
Phân tích: Gán biến global score = 5. Trong hàm calculateScore(), tạo biến local cùng tên score = 10.
Giá trị local score trong hàm là 10. Gọi hàm → in Final Score: 10.
Ngoài hàm, giá trị global score vẫn là 5. In Initial Score: + giá trị global → hiển thị 5.
Gán Biến Toàn Cục Bên Trong Hàm (Từ Khóa global)
Phần trên: global khai báo ngoài hàm, local khai báo trong hàm. Nhưng nếu dùng từ khóa global định nghĩa biến bên trong hàm (cục bộ), rồi chạy hàm đó trong chương trình (toàn cục), biến đó sẽ trở thành biến toàn cục.
Ví dụ:
def setName():
global name
name = "Bianca Peterson"
setName()
print(name)
Kết quả: "Bianca Peterson".
Code: gán giá trị name cục bộ (trong hàm setName()). Nhưng dùng từ khóa global trước khi định nghĩa → chuẩn bị cho name có global scope. Biến name thành global sau khi chạy hàm này.
Sau khi chạy setName(), bất kỳ lần nào dùng name trong chương trình (như print()), chương trình dùng giá trị khai báo trong hàm cục bộ. Vì name giờ là biến toàn cục.
Nhớ trước chúng ta nói không thể thay đổi trực tiếp biến toàn cục trong hàm? Đúng. Nhưng có thể dùng global để thay đổi gián tiếp.
Ví dụ dùng global trong hàm thay đổi giá trị biến toàn cục:
name = "Bianca Peterson"
def setName():
global name
name = "Bianca Lucinda Peterson"
setName()
print(name)
Kết quả: "Bianca Lucinda Peterson".
Phân tích: Dòng 1 khai báo global name = "Bianca Peterson". Hàm setName() dùng global name rồi gán giá trị mới. Gọi setName() → global name thay thành "Bianca Lucinda Peterson". In ra → giá trị mới.
Nên dùng global thận trọng. Lạm dụng khiến khó hiểu phạm vi biến trong chương trình.
Kết Luận
Biến toàn cục: khai báo ngoài hàm. Biến cục bộ: khai báo trong hàm.
Mặc dù không thể thay đổi trực tiếp biến toàn cục trong hàm, nhưng có thể dùng từ khóa global tạo hàm thay đổi giá trị biến toàn cục. Trong trường hợp này, giá trị biến toàn cục không thay đổi cho đến khi chạy hàm đó.
Hướng dẫn này thảo luận, kèm ví dụ, cơ bản về biến local/global và cách hoạt động. Bây giờ bạn đã sẵn sàng dùng biến local/global trong Python như lập trình viên chuyên nghiệp!