Câu 1Cách nào đúng để chú thích def add(x, y): sao cho cả hai tham số và giá trị trả về là int?
Type Hints — Để lại ý định trong code với : int và -> str
Học type hints trong Python. Chữ ký hàm def f(x: int) -> str:, khi nào thêm chú thích biến và khi nào không, và cách IDE dùng chúng cho kiểm tra tĩnh — kèm thực hành.
Bài này bao quát type hints — công cụ để để lại ý định «cái gì đi vào đây» bên trong code. Giới thiệu trong Python 3.5, chúng càng ngày càng biểu cảm hơn qua mỗi phiên bản.
Vấn đề «kiểu là gì?» trong ngôn ngữ động
Python là ngôn ngữ kiểu động. Viết value = 10 và nó là int; viết value = "HELLO" và cùng tên giờ là str. Cùng một biến có thể đổi kiểu bất cứ lúc nào — đó là sự linh hoạt. Nhược điểm là khi codebase phát triển hoặc team bắt đầu động vào, «biến này chứa gì?» / «hàm này trả về gì?» trở nên không trả lời được chỉ từ code.
Type hints để lại thông tin đó dưới dạng chú thích. Chúng không thay đổi hành vi runtime. Cái chúng làm là cho người đọc một gợi ý mạnh và để IDE và static analyzer bắt lỗi kiểu trước.
price nên là gì. Có hint, riêng chữ ký hàm cho bạn biết kiểu input và output.Chú thích chữ ký hàm
Chữ ký hàm là sân khấu chính cho type hints. Chú thích tham số dạng name: type (dấu hai chấm rồi kiểu sau tên) và kiểu trả về dạng -> type (mũi tên rồi kiểu ở cuối dòng def).
# ❌ không hint — chữ ký không nói cho bạn truyền gì
def calc_tax(price, rate):
return int(price * (1 + rate))
# ✅ có hint — «int vào, int ra» rõ ràng
def calc_tax(price: int, rate: float) -> int:
return int(price * (1 + rate))
print(calc_tax(price=1000, rate=0.1)) # 1100
Chú thích biến — Khi nào viết và khi nào không
Type hints cũng làm việc trên biến — cùng hình dạng: name: type = value. Nhưng chú thích biến nhanh chóng trở nên ồn nếu bạn lạm dụng, và ồn giảm khả năng đọc.
# ❌ ồn — giá trị đã nói cho bạn biết kiểu
name: str = "Minh"
age: int = 30
# ✅ đáng chú thích — container rỗng, init muộn, hoặc kiểu không rõ
results: list = [] # list rỗng, sẽ append sau
cache: dict = {} # có thể muốn chi tiết kiểu giá trị sau
user_id: int = fetch_id_from_session() # làm rõ kiểu mong đợi tại nơi gọi
Khi nghi ngờ: «hàm luôn, biến tiết kiệm»
Trong dự án thực, luôn chú thích chữ ký hàm và method, nhưng chỉ chú thích biến khi kiểu không rõ. age = 30 không cần : int — thêm chỉ là ồn.
Type Hints không bị cưỡng ép lúc runtime
Type hints chỉ là gợi ý. Python không kiểm tra hay cưỡng ép chúng lúc runtime. Một hàm khai báo def f(x: int) vui vẻ chấp nhận f("abc") — hàm chạy như thường. Chỉ sau đó, khi một phép tính sâu trong thân thất bại do không khớp kiểu, bạn mới thấy TypeError hoặc tương tự — và đó là lỗi runtime từ phép tính, không phải từ chính hint.
Vậy sao phải bận tâm? Vì trước khi hàm chạy, editor và static analyzer có thể phát hiện không khớp kiểu. VS Code's Pylance, PyCharm, mypy, pyright — tất cả đều đọc hint của bạn và gạch chân lỗi bằng đỏ, bắt bug trước khi thực thi.
Runner Python trên trình duyệt không hiện cảnh báo IDE
Console trên trang này chỉ chạy code của bạn — nó không có cơ sở kiểm tra kiểu tĩnh như VS Code. Vì vậy viết hoặc vi phạm type hint không bao giờ tạo gạch chân đỏ hay cảnh báo trước khi chạy ở đây. Lợi ích thực sự của type hints — lưới an toàn cảnh báo của editor trước khi bạn chạy — chỉ xuất hiện ở local với VS Code, PyCharm, v.v.
Ba nơi type hints mang lại giá trị
Kiểm tra kiến thức
Hãy trả lời từng câu hỏi một.
Câu 2Phát biểu nào chính xác nhất về type hints trong Python?
Câu 3Nơi nào được khuyến nghị nhất để thêm type hints?