Biến trong Python là gì? Cách tạo, sử dụng và quản lý biến từ cơ bản đến nâng cao

Biến trong Python

Khi bắt đầu học Python, biến gần như là một trong những khái niệm đầu tiên bạn sẽ gặp. Từ một chương trình đơn giản chỉ in ra dòng chữ "Hello World" cho đến những ứng dụng phức tạp xử lý dữ liệu, web hay trí tuệ nhân tạo, biến luôn xuất hiện ở rất nhiều vị trí khác nhau.

Hiểu đơn giản, biến giúp chúng ta lưu trữ và sử dụng dữ liệu trong chương trình. Bạn có thể dùng biến để lưu tên người dùng, tuổi, điểm số, giá sản phẩm, danh sách dữ liệu hoặc kết quả của một phép tính.

Điểm thú vị là Python làm việc với biến khá linh hoạt. Bạn không cần khai báo trước kiểu dữ liệu cho biến như trong một số ngôn ngữ lập trình khác. Chỉ với một phép gán đơn giản, bạn đã có thể tạo ra một biến và sử dụng nó ngay.

Trong bài viết này, chúng ta sẽ tìm hiểu toàn diện về biến trong Python, từ cách tạo biến, quy tắc đặt tên, kiểu dữ liệu, phạm vi biến cho đến cách Python thực sự quản lý biến và những lỗi thường gặp khi làm việc với chúng.

1. Biến trong Python là gì?

1.1. Khái niệm biến trong Python

Trong lập trình, biến (variable) là một tên được sử dụng để tham chiếu đến một giá trị hoặc một đối tượng trong chương trình.

Ví dụ:

name = "Python"
age = 30
score = 8.5

Trong ví dụ trên, chúng ta có ba biến:

  • name tham chiếu đến chuỗi "Python".
  • age tham chiếu đến số nguyên 30.
  • score tham chiếu đến số thực 8.5.

Nếu hình dung đơn giản, bạn có thể xem biến giống như một cái tên được gắn cho dữ liệu để chúng ta có thể dễ dàng sử dụng dữ liệu đó nhiều lần.

Chẳng hạn, thay vì viết trực tiếp:

print("Python")
print("Python")
print("Python")

chúng ta có thể tạo biến:

language = "Python"

print(language)
print(language)
print(language)

Cách làm này đặc biệt hữu ích khi dữ liệu thay đổi. Nếu sau này muốn đổi "Python" thành "Java", bạn chỉ cần thay đổi giá trị tại một vị trí.

1.2. Biến trong Python khác gì so với một số ngôn ngữ khác?

Một trong những điểm khiến Python thân thiện với người mới là bạn không cần khai báo kiểu dữ liệu trước khi tạo biến.

Ví dụ trong Python:

name = "Nguyen Van A"
age = 25
score = 8.5

Python tự xác định kiểu dữ liệu dựa trên giá trị được gán.

Đây là đặc điểm của dynamic typing, hay còn gọi là kiểu dữ liệu động.

Trong một số ngôn ngữ như Java hoặc C++, bạn thường phải chỉ rõ kiểu dữ liệu:

int age = 25;
String name = "Nguyen Van A";

Trong khi đó, Python cho phép viết ngắn gọn hơn:

age = 25
name = "Nguyen Van A"

Đây là một trong những lý do tôi đánh giá Python khá dễ tiếp cận đối với người mới học lập trình. Bạn có thể tập trung vào việc giải quyết bài toán trước khi phải quan tâm quá nhiều đến cú pháp khai báo.

Tuy nhiên, sự linh hoạt này cũng đi kèm trách nhiệm. Khi chương trình lớn dần, lập trình viên cần chủ động kiểm soát kiểu dữ liệu và cách sử dụng biến để tránh những lỗi khó phát hiện.

2. Cách tạo và gán giá trị cho biến trong Python

2.1. Cú pháp tạo biến

Cú pháp cơ bản để tạo và gán giá trị cho biến trong Python là:

ten_bien = gia_tri

Trong đó:

  • ten_bien: tên mà bạn muốn đặt cho biến.
  • =: toán tử gán.
  • gia_tri: dữ liệu được gán cho biến.

Ví dụ:

name = "An"
age = 20

Khi Python thực thi câu lệnh:

age = 20

bạn có thể hiểu đơn giản rằng tên age được liên kết với đối tượng số nguyên 20.

Python không yêu cầu bạn phải sử dụng các từ khóa như var, let hoặc const để tạo biến.

2.2. Gán giá trị cho biến

Một biến có thể được gán lại giá trị mới:

age = 30

age = 31

print(age)

Kết quả:

31

Sau phép gán thứ hai, age không còn tham chiếu đến giá trị 30 nữa mà tham chiếu đến giá trị 31.

Đây là đặc điểm rất quen thuộc khi lập trình. Ví dụ, một biến có thể bắt đầu bằng số tiền ban đầu, sau đó được cập nhật khi người dùng mua hàng:

total = 100000

total = total + 50000

print(total)

Kết quả:

150000

2.3. Kiểm tra giá trị và kiểu dữ liệu của biến

Để kiểm tra giá trị của biến, bạn có thể sử dụng print():

name = "Python"

print(name)

Nếu muốn biết biến đang tham chiếu đến kiểu dữ liệu nào, sử dụng hàm type():

name = "Python"

print(type(name))

Kết quả:

<class 'str'>

Ví dụ khác:

age = 25

print(type(age))

Kết quả:

<class 'int'>

type() là một công cụ rất hữu ích khi học Python. Trong thực tế, khi chương trình xuất hiện lỗi liên quan đến kiểu dữ liệu, việc kiểm tra type() có thể giúp bạn nhanh chóng xác định vấn đề.

3. Quy tắc đặt tên biến trong Python

Tên biến không thể được đặt tùy ý. Python có một số quy tắc mà lập trình viên bắt buộc phải tuân thủ.

3.1. Những quy tắc bắt buộc

Tên biến trong Python có thể bao gồm:

  • Chữ cái từ a-z, A-Z.
  • Chữ số từ 0-9.
  • Dấu gạch dưới _.

Tuy nhiên, tên biến không được bắt đầu bằng chữ số.

Ví dụ hợp lệ:

name = "An"
student_name = "An"
age2 = 20
_private_value = 100

Trong khi đó:

2age = 20

là không hợp lệ vì tên biến bắt đầu bằng số.

Tên biến cũng không được chứa khoảng trắng:

student name = "An"

Thay vào đó, hãy sử dụng dấu gạch dưới:

student_name = "An"

Python cũng phân biệt chữ hoa và chữ thường:

name = "An"
Name = "Binh"

nameName được xem là hai tên khác nhau.

Ngoài ra, bạn không thể sử dụng các keyword của Python làm tên biến, chẳng hạn:

class = "Python"

Đoạn code trên không hợp lệ vì class là từ khóa của Python.

3.2. Những tên biến hợp lệ và không hợp lệ

Tên biếnHợp lệ?Lý do
nameTên hợp lệ
student_nameSử dụng _
age2Có thể chứa số
_scoreCó thể bắt đầu bằng _
2ageKhôngKhông được bắt đầu bằng số
student nameKhôngCó khoảng trắng
classKhôngLà keyword

3.3. Quy ước đặt tên biến nên biết

Ngoài những quy tắc bắt buộc, Python còn có những quy ước đặt tên giúp code dễ đọc hơn.

Thông thường, biến trong Python được đặt theo kiểu snake_case:

student_name = "An"
total_score = 95
phone_number = "0123456789"

Nên tránh cách đặt tên quá khó hiểu:

x = "An"
ts = 95
p = "0123456789"

Trong một đoạn code ngắn, x hay a có thể không gây vấn đề. Nhưng khi dự án phát triển lên hàng nghìn dòng code, những tên như vậy sẽ khiến việc đọc và bảo trì trở nên khó khăn.

Một nguyên tắc khá đơn giản là:

Tên biến nên nói lên dữ liệu mà nó đang đại diện.

Ví dụ:

product_price = 100000

dễ hiểu hơn:

p = 100000

4. Các kiểu dữ liệu thường được sử dụng với biến

Một biến trong Python có thể tham chiếu đến rất nhiều loại dữ liệu khác nhau.

4.1. Biến kiểu số nguyên int

Số nguyên được biểu diễn bằng kiểu int:

age = 25
quantity = 10
year = 2026

Bạn có thể sử dụng các biến này trong phép tính:

price = 100
quantity = 3

total = price * quantity

print(total)

Kết quả:

300

4.2. Biến kiểu số thực float

Kiểu float dùng để biểu diễn số thực:

price = 99.5
temperature = 36.5
average_score = 8.75

Ví dụ:

price = 99.5
quantity = 2

total = price * quantity

print(total)

Kết quả:

199.0

4.3. Biến kiểu chuỗi str

Chuỗi dùng để lưu văn bản:

name = "Python"
language = "Vietnamese"
message = "Hello World"

Bạn có thể nối chuỗi bằng toán tử +:

first_name = "Nguyen"
last_name = "An"

full_name = first_name + " " + last_name

print(full_name)

4.4. Biến kiểu Boolean bool

Boolean chỉ có hai giá trị:

True
False

Ví dụ:

is_logged_in = True
is_admin = False

Kiểu Boolean thường xuất hiện trong các điều kiện:

is_logged_in = True

if is_logged_in:
    print("Người dùng đã đăng nhập")

4.5. Biến kiểu danh sách list

List cho phép lưu nhiều giá trị:

languages = ["Python", "Java", "JavaScript"]

Bạn có thể truy cập từng phần tử:

print(languages[0])

Kết quả:

Python

4.6. Tuple, Set và Dictionary

Python còn cung cấp nhiều kiểu dữ liệu cấu trúc khác.

Tuple:

coordinates = (10, 20)

Set:

colors = {"red", "green", "blue"}

Dictionary:

student = {
    "name": "An",
    "age": 20
}

Điểm quan trọng cần nhớ là biến không bị giới hạn ở một kiểu dữ liệu duy nhất. Nó có thể tham chiếu đến số, chuỗi, danh sách, dictionary hoặc nhiều loại object khác trong Python.

5. Kiểu dữ liệu của biến có thể thay đổi trong Python không?

5.1. Python là ngôn ngữ dynamic typing

Có, một biến trong Python có thể được gán cho các giá trị thuộc những kiểu dữ liệu khác nhau:

value = 100

value = "Python"

value = 3.14

Sau mỗi lần gán, value tham chiếu đến một đối tượng khác.

Bạn có thể kiểm tra:

value = 100
print(type(value))

value = "Python"
print(type(value))

value = 3.14
print(type(value))

Kết quả lần lượt sẽ là:

<class 'int'>
<class 'str'>
<class 'float'>

5.2. Điều gì thực sự xảy ra khi gán lại biến?

Đây là điểm mà người mới học Python thường có cách hiểu hơi khác so với bản chất.

Bạn có thể hình dung:

value = 100

là tên value đang được liên kết với object đại diện cho số 100.

Khi viết:

value = "Python"

Python không biến số 100 thành chuỗi "Python". Thay vào đó, tên value được liên kết với object "Python".

Đây cũng là lý do cách giải thích “biến là chiếc hộp chứa dữ liệu” chỉ phù hợp ở mức nhập môn. Khi học sâu hơn, cách hiểu chính xác hơn là biến là một tên tham chiếu đến object.

5.3. Dynamic typing có phải lúc nào cũng tốt?

Dynamic typing mang lại nhiều lợi ích:

  • Viết code nhanh.
  • Cú pháp ngắn gọn.
  • Linh hoạt trong quá trình phát triển.
  • Phù hợp với việc thử nghiệm và xây dựng prototype.

Tuy nhiên, nó cũng có thể khiến lỗi kiểu dữ liệu xuất hiện trong quá trình chạy chương trình.

Ví dụ:

age = "20"

result = age + 5

Đoạn code trên sẽ gây lỗi vì "20" là chuỗi trong khi 5 là số nguyên.

Vì vậy, càng làm việc với các dự án lớn, bạn càng cần có thói quen kiểm soát dữ liệu cẩn thận.

6. Gán nhiều biến trong Python

Python cho phép gán nhiều biến trong cùng một câu lệnh.

6.1. Gán nhiều biến cùng lúc

Ví dụ:

name, age, score = "An", 20, 8.5

Tương đương với:

name = "An"
age = 20
score = 8.5

Cách viết đầu tiên giúp code ngắn gọn hơn khi các giá trị đã rõ ràng.

6.2. Gán cùng một giá trị cho nhiều biến

Bạn cũng có thể gán cùng một giá trị cho nhiều biến:

x = y = z = 0

Sau câu lệnh này, cả ba biến đều được gán giá trị 0.

Cách này thường hữu ích khi khởi tạo nhiều biến có cùng giá trị ban đầu.

6.3. Hoán đổi giá trị giữa hai biến

Đây là một tính năng khá thú vị của Python.

Giả sử:

a = 10
b = 20

Bạn muốn đổi giá trị của ab.

Trong Python, chỉ cần:

a, b = b, a

Sau đó:

print(a)
print(b)

Kết quả:

20
10

Cách viết này rất gọn và không cần tạo thêm biến trung gian như trong nhiều cách triển khai truyền thống.

7. Biến hằng số trong Python

7.1. Python có constant không?

Python không cung cấp cơ chế constant bắt buộc khiến một biến không thể thay đổi.

Thay vào đó, cộng đồng Python sử dụng quy ước đặt tên để biểu thị một giá trị được xem là hằng số.

7.2. Cách đặt tên biến hằng số

Thông thường, hằng số được viết bằng chữ in hoa:

PI = 3.14159
MAX_USERS = 100
APP_NAME = "MyApp"

Cách viết này cho lập trình viên biết rằng những giá trị trên không nên được thay đổi trong quá trình chạy chương trình.

Tuy nhiên, Python vẫn cho phép:

MAX_USERS = 100
MAX_USERS = 200

Không có lỗi cú pháp chỉ vì bạn thay đổi nó.

7.3. Vì sao nên sử dụng quy ước này?

Quy ước viết hoa giúp code dễ đọc hơn.

Ví dụ:

TAX_RATE = 0.1

price = 100000
tax = price * TAX_RATE

Người đọc có thể nhanh chóng nhận ra TAX_RATE là một giá trị cấu hình hoặc hằng số được sử dụng xuyên suốt chương trình.

8. Phạm vi của biến trong Python (Variable Scope)

Khi chương trình bắt đầu có nhiều hàm và module, khái niệm scope – phạm vi của biến trở nên rất quan trọng.

8.1. Biến cục bộ (Local Variable)

Biến được tạo bên trong một hàm thường là biến cục bộ:

def calculate():
    result = 100
    print(result)

Ở đây, result chỉ có ý nghĩa trong phạm vi của hàm calculate().

Nếu cố truy cập result bên ngoài:

def calculate():
    result = 100

calculate()

print(result)

Python sẽ báo lỗi vì result không tồn tại trong phạm vi hiện tại.

8.2. Biến toàn cục (Global Variable)

Biến được tạo bên ngoài hàm có thể được truy cập từ bên trong hàm:

message = "Hello Python"

def show_message():
    print(message)

show_message()

Ở đây, message là biến toàn cục.

Tuy nhiên, không nên lạm dụng biến global, đặc biệt trong các dự án lớn. Việc có quá nhiều dữ liệu được chia sẻ toàn cục có thể khiến code khó kiểm soát và khó tìm nguyên nhân khi xảy ra lỗi.

8.3. Từ khóa global

Nếu muốn thay đổi một biến global bên trong hàm, bạn có thể sử dụng global:

count = 0

def increase():
    global count
    count += 1

increase()

print(count)

Kết quả:

1

Tuy nhiên, trong thiết kế chương trình thực tế, việc hạn chế thay đổi trực tiếp biến global thường giúp code dễ bảo trì hơn.

8.4. Quy tắc LEGB

Khi Python tìm kiếm một tên biến, nó tuân theo quy tắc LEGB:

  • L – Local: phạm vi cục bộ.
  • E – Enclosing: phạm vi của hàm bao ngoài.
  • G – Global: phạm vi toàn cục.
  • B – Built-in: các tên được Python cung cấp sẵn.

Bạn chưa cần ghi nhớ toàn bộ chi tiết ngay từ đầu. Chỉ cần hiểu rằng Python có những quy tắc cụ thể để xác định một tên biến đang tham chiếu đến đâu.

9. Biến và đối tượng trong Python

9.1. Biến thực chất là gì trong Python?

Ở mức cơ bản, bạn có thể hiểu biến là nơi lưu trữ dữ liệu. Nhưng khi muốn hiểu Python sâu hơn, cách diễn đạt chính xác hơn là:

Biến trong Python là một tên được liên kết với một object.

Ví dụ:

name = "Python"

name là tên, còn "Python" là một object.

Cách hiểu này rất quan trọng khi làm việc với các kiểu dữ liệu có thể thay đổi như list, dict hoặc set.

9.2. Nhiều biến có thể cùng tham chiếu một đối tượng

Xét ví dụ:

a = [1, 2, 3]
b = a

b.append(4)

print(a)
print(b)

Kết quả:

[1, 2, 3, 4]
[1, 2, 3, 4]

Tại sao thay đổi b lại ảnh hưởng đến a?

Bởi vì:

b = a

không tạo ra một list hoàn toàn mới. ab cùng tham chiếu đến một object list.

Đây là một trong những điểm rất quan trọng cần hiểu khi bắt đầu làm việc nghiêm túc với Python.

9.3. is== khác nhau như thế nào?

Hai toán tử thường gây nhầm lẫn là ==is.

== dùng để kiểm tra giá trị có bằng nhau hay không.

is dùng để kiểm tra hai tên có cùng tham chiếu đến một object hay không.

Ví dụ:

a = [1, 2, 3]
b = [1, 2, 3]

print(a == b)
print(a is b)

Kết quả:

True
False

Hai list có cùng nội dung nên a == bTrue.

Nhưng chúng là hai object khác nhau nên a is bFalse.

10. Gán biến và vấn đề mutable/immutable

10.1. Immutable là gì?

Immutable là những object không thể thay đổi nội dung sau khi được tạo.

Một số kiểu dữ liệu immutable phổ biến gồm:

  • int
  • float
  • str
  • bool
  • tuple

Ví dụ với chuỗi:

name = "Python"

Bạn không thể thay đổi trực tiếp một ký tự bên trong chuỗi như cách thay đổi phần tử của list.

10.2. Mutable là gì?

Mutable là những object có thể thay đổi nội dung sau khi được tạo.

Các ví dụ phổ biến:

  • list
  • dict
  • set

Ví dụ:

numbers = [1, 2, 3]

numbers.append(4)

print(numbers)

Kết quả:

[1, 2, 3, 4]

Object list ban đầu đã được thay đổi.

10.3. Tại sao người mới học Python nên hiểu điều này?

Hãy xem lại ví dụ:

numbers = [1, 2, 3]
other_numbers = numbers

other_numbers.append(4)

print(numbers)

Kết quả:

[1, 2, 3, 4]

Điều này có thể gây bất ngờ nếu bạn nghĩ other_numbers = numbers có nghĩa là tạo ra một bản sao độc lập.

Nếu muốn tạo một bản sao riêng trong trường hợp này, có thể sử dụng:

numbers = [1, 2, 3]
other_numbers = numbers.copy()

other_numbers.append(4)

print(numbers)
print(other_numbers)

Kết quả:

[1, 2, 3]
[1, 2, 3, 4]

Hiểu được mutable và immutable sẽ giúp bạn tránh rất nhiều lỗi liên quan đến dữ liệu khi làm việc với Python.

11. Những lỗi thường gặp khi sử dụng biến trong Python

11.1. Sử dụng biến trước khi gán

Ví dụ:

print(name)

name = "Python"

Python sẽ báo lỗi NameErrorname chưa được định nghĩa tại thời điểm sử dụng.

Cách đúng:

name = "Python"

print(name)

11.2. Đặt tên biến không hợp lệ

Ví dụ:

2name = "Python"

Đoạn code này không hợp lệ vì tên biến bắt đầu bằng chữ số.

Hãy viết:

name2 = "Python"

11.3. Vô tình ghi đè biến

Ví dụ:

name = "Python"

name = 100

Code vẫn chạy bình thường, nhưng ý nghĩa của biến đã thay đổi hoàn toàn.

Trong một chương trình lớn, việc vô tình ghi đè biến có thể tạo ra những lỗi khó tìm.

Do đó, nên đặt tên biến rõ ràng và hạn chế tái sử dụng một biến cho quá nhiều mục đích khác nhau.

11.4. Đặt tên biến trùng với built-in

Python có rất nhiều hàm và tên được xây dựng sẵn. Ví dụ:

list = [1, 2, 3]

Câu lệnh này có thể chạy, nhưng bạn đã ghi đè tên list built-in.

Sau đó, đoạn code:

numbers = list((1, 2, 3))

có thể gặp lỗi vì list không còn tham chiếu đến built-in function như ban đầu.

Vì vậy, nên tránh sử dụng các tên như:

list
str
int
dict
set
sum
input
print

làm tên biến.

11.5. Nhầm giữa chuỗi và số

Đây là lỗi rất phổ biến:

age = "20"

Ở đây age là chuỗi chứ không phải số nguyên.

Trong khi:

age = 20

là số nguyên.

Sự khác biệt này đặc biệt quan trọng khi nhận dữ liệu từ input(), bởi dữ liệu người dùng nhập vào mặc định là chuỗi.

12. Một số thao tác thường gặp với biến trong Python

12.1. Gán giá trị từ phép tính

Bạn có thể gán kết quả của một biểu thức cho biến:

total = 10 + 20

Sau đó:

print(total)

Kết quả:

30

12.2. Sử dụng biến trong biểu thức

Ví dụ tính tổng tiền:

price = 100000
quantity = 3

total = price * quantity

print(total)

Ở đây:

  • price lưu đơn giá.
  • quantity lưu số lượng.
  • total lưu kết quả.

Cách chia dữ liệu thành các biến có ý nghĩa giúp chương trình dễ đọc hơn nhiều.

12.3. Sử dụng biến với chuỗi

Bạn có thể kết hợp các biến chuỗi:

name = "An"

message = "Xin chào " + name

print(message)

Tuy nhiên, với các chuỗi chứa nhiều biến, f-string thường là lựa chọn dễ đọc hơn.

12.4. Sử dụng f-string

Ví dụ:

name = "An"
age = 20

message = f"{name} năm nay {age} tuổi."

print(message)

Kết quả:

An năm nay 20 tuổi.

f-string đặc biệt hữu ích khi xây dựng thông báo, nội dung HTML, log hoặc các chuỗi chứa nhiều giá trị động.

13. Biến trong Python kết hợp với input()

Một trong những cách tốt nhất để hiểu biến là đưa nó vào một chương trình có tương tác với người dùng.

13.1. Nhận dữ liệu từ người dùng

Hàm input() cho phép nhận dữ liệu:

name = input("Nhập tên của bạn: ")

print(name)

Người dùng nhập:

An

thì biến name sẽ nhận giá trị "An".

Điểm cần nhớ là dữ liệu do input() trả về mặc định có kiểu str.

13.2. Chuyển đổi kiểu dữ liệu khi nhập số

Nếu muốn nhận một số nguyên:

age = int(input("Nhập tuổi: "))

Ở đây:

  1. input() nhận dữ liệu dưới dạng chuỗi.
  2. int() chuyển chuỗi đó thành số nguyên.
  3. Kết quả được gán cho biến age.

Ví dụ:

age = int(input("Nhập tuổi: "))

print(age + 1)

Nếu nhập 20, kết quả sẽ là:

21

13.3. Ví dụ hoàn chỉnh

Chúng ta có thể kết hợp biến, input(), chuyển đổi kiểu dữ liệu và f-string:

name = input("Tên của bạn: ")
age = int(input("Tuổi của bạn: "))

print(f"Xin chào {name}, bạn {age} tuổi.")

Đây là một ví dụ rất đơn giản nhưng chứa nhiều kiến thức quan trọng của Python:

  • Tạo biến.
  • Gán giá trị.
  • Nhận dữ liệu.
  • Chuyển đổi kiểu dữ liệu.
  • Sử dụng biến trong chuỗi.

14. Cách sử dụng biến hiệu quả trong thực tế

14.1. Đặt tên biến rõ ràng

Ưu tiên:

customer_name = "An"
order_total = 500000

thay vì:

cn = "An"
ot = 500000

14.2. Không tạo biến khi không cần thiết

Không phải kết quả nào cũng cần được lưu vào biến.

Ví dụ:

result = 10 + 20
print(result)

Trong một số trường hợp, bạn có thể viết trực tiếp:

print(10 + 20)

Tuy nhiên, nếu giá trị được sử dụng nhiều lần hoặc có ý nghĩa trong logic chương trình, việc tạo biến vẫn là lựa chọn tốt hơn.

14.3. Hạn chế ghi đè biến một cách tùy tiện

Ví dụ:

value = "Python"

# Sau đó value lại trở thành một số
value = 100

Code vẫn hợp lệ nhưng khiến người đọc khó theo dõi.

Nên sử dụng tên biến thể hiện đúng mục đích:

language = "Python"
score = 100

14.4. Không lạm dụng biến global

Biến global có thể thuận tiện ở chương trình nhỏ, nhưng trong dự án lớn, quá nhiều trạng thái global có thể khiến code khó kiểm soát.

Nên ưu tiên truyền dữ liệu vào hàm và trả kết quả từ hàm khi phù hợp.

14.5. Sử dụng hằng số theo convention

Ví dụ:

MAX_LOGIN_ATTEMPTS = 5

Cách viết này giúp người đọc nhận biết đây là giá trị cấu hình hoặc hằng số.

14.6. Chọn kiểu dữ liệu phù hợp

Không nên chỉ quan tâm “lưu được dữ liệu” mà cần quan tâm dữ liệu đó được sử dụng như thế nào.

Ví dụ:

students = ["An", "Binh", "Cuong"]

phù hợp nếu bạn cần một danh sách.

Trong khi:

student = {"name": "An", "age": 20}

phù hợp hơn khi cần lưu thông tin có cấu trúc của một đối tượng.

14.7. Sử dụng type hint khi dự án trở nên lớn

Python hỗ trợ type hint:

name: str = "An"
age: int = 20
score: float = 8.5

Type hint không bắt buộc Python phải kiểm tra kiểu dữ liệu tại thời điểm chạy theo cách của một ngôn ngữ statically typed. Tuy nhiên, nó giúp code dễ đọc hơn và hỗ trợ các công cụ phân tích, IDE cũng như quá trình bảo trì dự án.

15. Ví dụ thực tế: Xây dựng chương trình quản lý thông tin sinh viên

Để tổng hợp những kiến thức vừa học, hãy thử xây dựng một chương trình nhỏ quản lý thông tin sinh viên.

15.1. Khai báo các biến

Trước tiên, chúng ta có thể tạo các biến:

student_name = "Nguyen Van An"
student_age = 20
student_score = 8.5
is_passed = True

Mỗi biến đảm nhận một nhiệm vụ rõ ràng:

  • student_name: tên sinh viên.
  • student_age: tuổi.
  • student_score: điểm số.
  • is_passed: trạng thái đạt hay không đạt.

15.2. Hiển thị thông tin

Sử dụng f-string:

print(f"Tên: {student_name}")
print(f"Tuổi: {student_age}")
print(f"Điểm: {student_score}")
print(f"Đạt: {is_passed}")

Kết quả:

Tên: Nguyen Van An
Tuổi: 20
Điểm: 8.5
Đạt: True

15.3. Nhận dữ liệu từ người dùng

Chúng ta có thể biến chương trình thành một ứng dụng tương tác:

student_name = input("Nhập tên sinh viên: ")
student_age = int(input("Nhập tuổi: "))
student_score = float(input("Nhập điểm: "))

is_passed = student_score >= 5

print("\n--- Thông tin sinh viên ---")
print(f"Tên: {student_name}")
print(f"Tuổi: {student_age}")
print(f"Điểm: {student_score}")
print(f"Đạt: {is_passed}")

Nếu người dùng nhập:

Nhập tên sinh viên: Nguyen Van An
Nhập tuổi: 20
Nhập điểm: 8.5

chương trình có thể cho kết quả:

--- Thông tin sinh viên ---
Tên: Nguyen Van An
Tuổi: 20
Điểm: 8.5
Đạt: True

15.4. Qua ví dụ này cần ghi nhớ gì?

Chỉ với một chương trình nhỏ, chúng ta đã kết hợp rất nhiều kiến thức về biến:

  • Biến có thể lưu nhiều kiểu dữ liệu.
  • Giá trị có thể được lấy từ người dùng.
  • Có thể chuyển đổi kiểu dữ liệu.
  • Biến có thể được sử dụng trong phép tính và biểu thức.
  • Kết quả của biểu thức cũng có thể được gán cho biến.
  • Tên biến rõ ràng giúp chương trình dễ đọc hơn.

Đây chính là cách tôi khuyến khích người mới học Python: đừng chỉ đọc khái niệm về biến, hãy liên tục đưa chúng vào những chương trình nhỏ. Khi tự tay viết, sửa lỗi và quan sát kết quả, kiến thức sẽ trở nên dễ nhớ hơn rất nhiều.

16. Một số câu hỏi thường gặp về biến trong Python

16.1. Python có cần khai báo biến trước không?

Không. Bạn có thể tạo biến trực tiếp thông qua phép gán:

name = "Python"

Python sẽ xác định kiểu dữ liệu dựa trên object được gán.

16.2. Một biến trong Python có thể thay đổi kiểu dữ liệu không?

Có.

value = 100
value = "Python"

Đây là một đặc điểm của dynamic typing trong Python.

16.3. Có thể đặt tên biến bằng tiếng Việt không?

Về mặt kỹ thuật, Python hỗ trợ Unicode nên tên biến có thể sử dụng một số ký tự ngoài ASCII. Tuy nhiên, trong dự án thực tế, nên ưu tiên tên biến bằng tiếng Anh để code dễ chia sẻ, đọc hiểu và bảo trì trong môi trường phát triển đa quốc gia.

Ví dụ nên dùng:

student_name = "An"

thay vì:

ten_sinh_vien = "An"

16.4. Python có biến hằng số không?

Python không có cơ chế constant bắt buộc theo cách một số ngôn ngữ khác cung cấp.

Thay vào đó, lập trình viên thường sử dụng chữ in hoa:

MAX_USERS = 100

để biểu thị rằng giá trị này không nên thay đổi.

16.5. is== khi làm việc với biến khác nhau thế nào?

== kiểm tra hai object có giá trị tương đương hay không.

is kiểm tra hai tên có tham chiếu đến cùng một object hay không.

Đây là hai phép kiểm tra hoàn toàn khác nhau và không nên sử dụng thay thế cho nhau.

16.6. Biến local và global khác nhau thế nào?

Biến local được tạo trong một phạm vi cục bộ, chẳng hạn bên trong hàm.

Biến global được tạo ở phạm vi toàn cục và có thể được truy cập từ nhiều phạm vi phù hợp.

Trong thực tế, nên hạn chế việc phụ thuộc quá nhiều vào biến global.

16.7. Có nên sử dụng biến global không?

Có thể sử dụng khi phù hợp, đặc biệt với những giá trị cấu hình hoặc trạng thái thực sự cần chia sẻ. Tuy nhiên, không nên lạm dụng vì nó có thể khiến code khó kiểm soát và kiểm thử.

16.8. Vì sao a = b có thể khiến thay đổi b ảnh hưởng đến a?

Điều này thường xảy ra khi ab cùng tham chiếu đến một object mutable:

a = [1, 2, 3]
b = a

b.append(4)

Khi đó cả ab đều nhìn thấy object list đã thay đổi.

16.9. Type hint có bắt buộc khi khai báo biến không?

Không.

Bạn hoàn toàn có thể viết:

age = 20

hoặc:

age: int = 20

Type hint chủ yếu giúp code rõ ràng hơn và hỗ trợ các công cụ phát triển.

16.10. Làm sao kiểm tra kiểu dữ liệu của biến?

Sử dụng type():

value = 100

print(type(value))

Kết quả:

<class 'int'>

17. Tổng kết

Biến trong Python là một trong những khái niệm nền tảng mà bất kỳ người học Python nào cũng cần nắm chắc. Mặc dù cú pháp tạo biến rất đơn giản, phía sau nó là nhiều khái niệm quan trọng liên quan đến object, reference, kiểu dữ liệu và phạm vi hoạt động.

Ở mức cơ bản, bạn cần ghi nhớ cách tạo biến:

name = "Python"
age = 30

Bên cạnh đó, hãy đặc biệt chú ý đến quy tắc đặt tên biến. Một tên biến tốt không chỉ giúp code hợp lệ mà còn giúp người khác dễ dàng hiểu chương trình đang làm gì.

Bạn cũng cần nhớ rằng Python sử dụng dynamic typing, vì vậy một biến có thể lần lượt tham chiếu đến các kiểu dữ liệu khác nhau:

value = 100
value = "Python"
value = 3.14

Khi bắt đầu làm việc với chương trình phức tạp hơn, những khái niệm như local variable, global variable, LEGB, mutable, immutable và object reference sẽ trở nên đặc biệt quan trọng.

Nếu mới học Python, tôi không khuyến khích bạn cố gắng ghi nhớ tất cả những khái niệm nâng cao ngay lập tức. Hãy bắt đầu bằng những chương trình nhỏ: lưu tên, tính tuổi, tính tiền, nhập điểm sinh viên, xử lý danh sách… Sau đó, khi gặp vấn đề thực tế, hãy quay lại tìm hiểu sâu hơn về cách Python quản lý biến.

Nắm chắc biến cũng chính là bước đệm để bạn tiếp tục học những phần quan trọng hơn của Python như kiểu dữ liệu, toán tử, câu lệnh điều kiện, vòng lặp, hàm, list, dictionary và lập trình hướng đối tượng. Khi những kiến thức này kết nối lại với nhau, bạn sẽ bắt đầu nhìn Python không còn là những câu lệnh rời rạc mà là một công cụ thực sự để giải quyết vấn đề.

Tài liệu tham khảo

[1] Python Software Foundation, “An Informal Introduction to Python,” Python 3 Documentation. [Online]. Available: https://docs.python.org/3/tutorial/introduction.html. [Accessed: Sep. 3, 2026].

[2] Python Software Foundation, “More Control Flow Tools,” Python 3 Documentation. [Online]. Available: https://docs.python.org/3/tutorial/controlflow.html. [Accessed: Sep. 3, 2026].

[3] Python Software Foundation, “Data Structures,” Python 3 Documentation. [Online]. Available: https://docs.python.org/3/tutorial/datastructures.html. [Accessed: Sep. 3, 2026].

[4] Python Software Foundation, “Naming and binding,” The Python Language Reference. [Online]. Available: https://docs.python.org/3/reference/executionmodel.html#naming-and-binding. [Accessed: Sep. 3, 2026].

[5] Python Software Foundation, “Built-in Types,” Python 3 Documentation. [Online]. Available: https://docs.python.org/3/library/stdtypes.html. [Accessed: Sep. 3, 2026].

[6] Python Software Foundation, “The global statement,” Python 3 Documentation. [Online]. Available: https://docs.python.org/3/reference/simple_stmts.html#the-global-statement. [Accessed: Sep. 3, 2026].

[7] M. Lutz, Learning Python, 5th ed. Sebastopol, CA, USA: O’Reilly Media, 2013.

[8] E. Matthes, Python Crash Course: A Hands-On, Project-Based Introduction to Programming, 3rd ed. San Francisco, CA, USA: No Starch Press, 2023.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *