Toán tử ba ngôi (ternary operator) Python cho phép đánh giá xem điều kiện có đúng hay sai. Toán tử ba ngôi chiếm một dòng mã, nghĩa là ngắn gọn và súc tích hơn câu lệnh if...else đầy đủ.
Câu lệnh điều kiện, như câu lệnh if, cho phép kiểm soát luồng chương trình. Mã trong câu lệnh điều kiện chỉ chạy khi điều kiện cụ thể (hoặc tập điều kiện) được đáp ứng.
Trong Python, cách phổ biến nhất viết câu lệnh điều kiện là dùng if. Tuy nhiên, ngôn ngữ cũng cung cấp cách kiểm tra điều kiện trên một dòng: toán tử ba ngôi (ternary operator).
Hướng dẫn này sẽ thảo luận, tham chiếu ví dụ, cơ bản câu lệnh điều kiện và cách dùng toán tử ba ngôi Python.
Điều kiện Python (Conditionals)
Khi viết chương trình, bạn có thể chỉ muốn một dòng hoặc khối mã thực thi khi điều kiện được đáp ứng. Đó là nơi câu lệnh điều kiện hữu ích.
Câu lệnh if Python dùng kiểm tra xem điều kiện có được đáp ứng không.
Giả sử xây dựng ứng dụng kiểm tra xem khách hàng có đủ điều kiện nhận giảm giá 10% tại rạp chiếu phim không. Nếu khách hàng 65 tuổi trở lên, nên cho giảm giá, ngược lại, không giảm giá. Chúng ta có thể xây dựng chương trình dùng câu lệnh if...else.
Nhưng câu lệnh if chiếm ít nhất hai dòng mã. Có cách súc tích hơn viết câu lệnh if nếu chỉ đánh giá vài điều kiện: toán tử ba ngôi trong Python.
Python Ternary Operator
Toán tử ba ngôi là loại biểu thức điều kiện trong Python đánh giá câu lệnh. Toán tử ba ngôi thực hiện hành động dựa trên câu lệnh đúng hay sai. Chúng súc tích hơn câu lệnh if...else truyền thống.
Cú pháp câu lệnh ba ngôi Python:
[if_true] if [expression] else [if_false]
Toán tử điều kiện ba ngôi Python lấy tên từ việc nhận ba tham số: if_true, expression, if_false.
Toán tử ba ngôi thường dùng xác định giá trị biến. Biến nhận giá trị "if_true" nếu biểu thức đánh giá True hoặc "if_false" nếu đánh giá False.
Cách nghĩ về toán tử ba ngôi giống như list comprehension Python đối với lọc danh sách. Hoặc lambda function đối với định nghĩa hàm.
Cả list comprehension và lambda function là cách hiệu quả hơn thực hiện hành động (lọc danh sách và định nghĩa hàm, tương ứng). Giống như toán tử ba ngôi là cách hiệu quả hơn viết câu lệnh if.
Nhưng, giống toán tử ba ngôi, chỉ nên dùng để cải thiện độ đọc mã. Không nên lạm dụng toán tử ba ngôi nếu không mã khó đọc hơn.
Ví dụ Ternary Operator Python
Giả sử muốn cho khách rạp phim giảm giá nếu 65 tuổi trở lên. Nếu khách không 65 tuổi, không có quyền giảm giá. Chúng ta kiểm tra khách đủ điều kiện nhận giảm giá bằng mã:
age = 48 discount = True if age >= 65 else False print(discount)
Mã trả về: False.
Dòng đầu, khai báo biến Python age. Biến gán giá trị 48. Tiếp theo, dùng toán tử ba ngôi tính xem khách đủ điều kiện giảm giá.
Toán tử ba ngôi đánh giá biểu thức age >= 65. Vì age bằng 48, đánh giá False. Vì vậy, mã sau câu lệnh else thực thi.
Sau đó, in kết quả toán tử ba ngôi ra bảng điều khiển. Trả về giá trị False.
Nếu so sánh ví dụ này với ví dụ trước, thấy nó dùng ít dòng mã hơn đáng kể. Chương trình đầu dùng năm dòng, cái này dùng ba.
Trong ví dụ này, toán tử ba ngôi trả về giá trị boolean Python (True hoặc False). Tuy nhiên, chúng ta có thể cho phép toán tử ba ngôi trả về bất kỳ giá trị nào.
Ternary Python với giá trị số
Giả sử muốn đặt tỷ lệ giảm giá cụ thể tùy thuộc vào khách đủ điều kiện giảm giá. Mặc định, rạp phim cho tất cả khách giảm 5%, nhưng người cao tuổi (65 tuổi trở lên) đủ điều kiện giảm 10%.
Chương trình sau cho phép kiểm tra khách đủ điều kiện giảm giá người cao tuổi. Nếu không đủ điều kiện, cho giảm 5%:
age = 22 discount = 5 if age < 65 else 10 print(discount)
Mã trả về: 5. Trong mã, gán giá trị 22 cho biến age.
Dùng toán tử ba ngôi kiểm tra giá trị biến age có nhỏ hơn 65 không. Vì khách 22 tuổi, câu lệnh age < 65 đánh giá True. Nghĩa là khách được tỷ lệ giảm 5%. Nếu khách 65 tuổi trở lên, nhận tỷ lệ 10%.
Sau đó, in giá trị biến discount ra bảng điều khiển.
Kết luận
Toán tử ba ngôi Python là cách hiệu quả hơn thực hiện câu lệnh if đơn giản. Toán tử ba ngôi đánh giá điều kiện, trả về giá trị cụ thể tùy thuộc điều kiện bằng True hay False.
Trong ví dụ trên, chúng ta chạy câu lệnh if trên một dòng. Ngắn gọn hơn nhiều dòng thường cần tạo câu lệnh if.
Tuy nhiên, toán tử ba ngôi không luôn dùng được. Nếu muốn kiểm tra nhiều biểu thức, nên viết đầy đủ câu lệnh if. Điều này đảm bảo mã dễ đọc và hiểu.
Hướng dẫn này thảo luận, tham chiếu ví dụ, cơ bản toán tử ba ngôi Python và cách hoạt động. Bây giờ bạn có kiến thức dùng toán tử này như chuyên gia Python!
Để tìm hiểu thêm lập trình Python, đọc hướng dẫn hoàn chỉnh How to Learn Python.