Menu

Biến trong Python: cách khai báo, gán giá trị và đặt tên

Biến hoạt động thế nào trong Python: phép gán, quy tắc đặt tên, gán lại và mô hình tư duy giúp bạn tránh rắc rối.

Trang này có trình soạn thảo chạy trực tiếp. Sửa, chạy và xem đầu ra ngay lập tức.

Biến là một cái tên

Biến (variable) trong Python là một cái tên bạn gắn vào một giá trị. Bạn viết tên, một dấu bằng, rồi đến giá trị:

Ba biến, ba giá trị, ba kiểu dữ liệu. Python vui vẻ giữ chúng cạnh nhau, và bạn không phải nói gì với nó về loại giá trị của từng biến. Giá trị đứng sau dấu =; tên đứng trước.

Khi biến đã tồn tại, bạn có thể dùng nó ở bất cứ đâu mà bạn có thể dùng chính giá trị đó:

Các cái tên khiến dòng áp chót tự giải thích ý nghĩa. Đó mới là lợi ích thật sự của việc đặt tên biến tốt: code đọc lên như một lời giải thích.

Phép gán không phải toán học

Một điều khiến những ai quen với giờ học toán hay vấp: = trong Python không có nghĩa là "bằng". Nó có nghĩa là "gán". Tức là "lấy giá trị sau dấu = rồi gắn nó vào cái tên đứng trước". Python tính giá trị trước, rồi mới thực hiện phép gán.

Vì vậy, đoạn này hoàn toàn hợp lệ:

Dòng count = count + 1 không khẳng định count bằng count cộng một (điều không thể về mặt toán học). Nó nói rằng: tính count + 1, rồi gán kết quả trở lại cho count. Python tính biểu thức trước, 0 + 1 cho ra 1, và chỉ sau đó mới cập nhật biến.

Bạn sẽ viết count = count + 1 thường xuyên đến mức Python có hẳn một cách viết tắt: count += 1 làm điều tương tự.

Gán lại thay đổi nhãn, không thay đổi giá trị

Một biến có thể trỏ đến giá trị khác bất cứ lúc nào bạn muốn. Giá trị cũ không bị sửa: biến chỉ đơn giản là bắt đầu tham chiếu đến thứ khác:

Hãy để ý dòng cuối. mood chứa một chuỗi trong hai dòng rồi bỗng nhiên chứa một số nguyên. Python không hề phàn nàn. Đây là kiểu động (dynamic typing): biến không có kiểu cố định, chỉ giá trị mới có kiểu. Sự linh hoạt này có ích khi làm thử nghiệm nhanh nhưng gây đau đầu khi một biến đổi ý nghĩa bên trong hàm mà bạn không để ý. Thói quen an toàn là chọn một cái tên khớp với điều giá trị đó đại diện, rồi giữ cho biến chỉ đại diện cho đúng một thứ đó suốt vòng đời của nó.

Quy tắc đặt tên biến

Python chấp nhận những tên:

  • Bắt đầu bằng chữ cái hoặc dấu gạch dưới (_).
  • Chứa chữ cái, chữ số và dấu gạch dưới.
  • Không phải là từ khóa dành riêng (if, for, class, return và vài chục từ khác).

Vì vậy những tên này hợp lệ:

Còn những tên này thì không:

  • 2nd_user: không được bắt đầu bằng chữ số.
  • user-name: không được dùng dấu gạch ngang (Python hiểu đó là phép trừ).
  • class: từ khóa dành riêng.
  • user name: tên không được chứa khoảng trắng.

Như bạn đã biết, tên phân biệt chữ hoa và chữ thường: total, Total và TOTAL là ba biến khác nhau. Python sẽ không phát hiện lỗi gõ nhầm giúp bạn.

Quy ước đặt tên

Ngoài các quy tắc bắt buộc, cộng đồng Python còn có những quy ước: trình thông dịch không ép buộc, nhưng chúng được dùng ở khắp hệ sinh thái:

  • lower_snake_case cho biến và hàm thông thường: retry_count, fetch_profile.
  • UPPER_SNAKE_CASE cho hằng số: MAX_RETRIES = 5.
  • PascalCase cho tên lớp (chúng ta sẽ nói đến sau).
  • Dấu gạch dưới ở đầu (_something) là gợi ý rằng tên đó được dùng nội bộ. Không bị ép buộc, chỉ là quy ước.
  • Dấu gạch dưới ở cuối (class_) cho phép bạn dùng một tên mà nếu không sẽ trùng với từ khóa.

Theo đúng những quy ước này, code của bạn sẽ trông giống code Python mà mọi người khác viết.

Tên nên mô tả ý nghĩa

Gõ tên biến thì không tốn gì, nhưng đọc thì tốn. Bỏ thêm vài ký tự để chọn một cái tên mô tả đúng ý nghĩa của giá trị sẽ giúp người đọc sau này (thường chính là bạn trong tương lai) đỡ phải căng mắt rất nhiều.

So sánh:

Cùng code, cùng đáp án, nhưng chỉ phiên bản thứ hai cho bạn biết chuyện gì đang diễn ra. Tên ngắn (i, n, x) vẫn ổn trong phạm vi rất nhỏ như biến đếm của vòng lặp, nhưng ngoài những chỗ đó, hãy viết đầy đủ.

Gán nhiều biến (dùng có chừng mực)

Python cho phép bạn gán cùng một giá trị cho nhiều biến trong một dòng:

Hoặc giải nén nhiều giá trị cùng lúc:

Cả hai đều ổn khi chúng làm code rõ ràng hơn (như giải nén giá trị trả về của một hàm). Dạng đầu tiên, gán nối tiếp = = =, cần chú ý một chút: cả ba biến cuối cùng đều tham chiếu đến cùng một đối tượng, điều này quan trọng với các kiểu khả biến như list (sẽ nói thêm sau).

Điều cần nhớ

  • name = value tạo một biến.
  • Biến không có kiểu; giá trị mới có.
  • Tên tuân theo vài quy tắc bắt buộc và nhiều quy ước mềm: cả hai đều đáng tôn trọng.
  • Một cái tên mô tả rõ ràng là dạng tài liệu rẻ nhất.

Tiếp theo: Python thực sự hỗ trợ những loại giá trị nào, gồm số nguyên, số thực, chuỗi, boolean, và vì sao biết rõ loại nào là loại nào lại hữu ích.

Câu hỏi thường gặp

Làm sao tạo một biến trong Python?

Chọn một cái tên, đặt dấu = sau nó và đặt một giá trị ở vế phải. age = 30 tạo một biến tên age với giá trị 30. Python tự xác định kiểu dữ liệu: bạn không cần khai báo.

Quy tắc đặt tên biến trong Python là gì?

Tên có thể chứa chữ cái, chữ số và dấu gạch dưới, nhưng không được bắt đầu bằng chữ số. Tên không được trùng với từ khóa của Python như if hay class. Tên phân biệt chữ hoa và chữ thường: total, Total và TOTAL là ba biến khác nhau. Quy ước của cộng đồng là lower_snake_case.

Biến trong Python có đổi kiểu được không?

Có. Python dùng kiểu động, nên một biến lúc này chứa số thì lúc sau có thể chứa chuỗi. Sự linh hoạt này tiện lợi nhưng cũng có thể gây bất ngờ: nếu ý nghĩa của một biến thay đổi giữa chừng trong một hàm, đó thường là dấu hiệu nên chọn một tên mới.

Hình minh họa các ngôn ngữ lập trình của Coddy

Học lập trình cùng Coddy

Bắt đầu