Tenary operators (Toán tử ba ngôi) còn được gọi là các biểu thức điều kiện, là các toán tử thực hiện đánh giá một cái gì đó dựa trên một điều kiện “là đúng” hoặc “là sai” đã được xác định trước. Toán tử này đã được thêm vào Python trong phiên bản 2.5. Nó chỉ đơn giản là cho phép kiểm tra một điều kiện nào đó trong một dòng code duy nhất, thay vì phải sử dụng nhiều chuỗi if-else, giúp cho code chở nên gọn gàng hơn.
Cú pháp
[on_true] if [expression] else [on_false]
Nội dung chính
1. Phương pháp đơn giản để sử dụng tenary operator
# Đoạn chương trình mô tả cách sử dụng toán tử kiểm tra điều kiện
a, b = 10, 20
# Nếu a < b thì copy giá trị của biến a vào biến min, nếu không thì copy giá trị của biến b vào biến min
min = a if a < b else b
print(min)
Kết quả in ra là:
10
2. Phương pháp trực tiếp bằng cách sử dụng tuple, kiểu Dictionary và lambda
# Đoạn chương trình Python mô tả cách sử dụng tenary operatora, b = 10, 20
# Sử dụng tuple để chọn ra một phần tử
# (if_test_false,if_test_true)[test]
print( (b, a) [a < b] )
# Sử dụng Dictionary để chọn ra một phần tử
print({True: a, False: b} [a < b])
# lamda hiệu quả hơn nhiều so với hai phương pháp trên
# bởi vì với lambda, chúng ta có thể đảm bảo rằng
# chỉ có một biểu thức sẽ được đánh giá, không giống như trong
# tuple và Dictionary
print((lambda: b, lambda: a)[a < b]())
print((lambda: b, lambda: a)[a < b]())
Kết quả in ra là:
10
10
10
3. Tenary operator có thể được viết dưới dạng các các chuỗi if-else lồng nhau
# Đoạn chương trình Python mô tả cách sử dụng nested ternary operator (toán tử ba ngôi ở dạng lồng)
print ("Both a and b are equal" if a == b else "a is greater than b"
if a > b else "b is greater than a")
Cách tiếp cận sử dụng nested tenary operator ở trên có thể được viết thành:
# Đoạn chương trình Python mô tả cách sử dụng nested ternary operator (toán tử ba ngôi ở dạng lồng)
a, b = 10, 20
if a != b:
if a > b:
print("a is greater than b")
else:
print("b is greater than a")
else:
print("Both a and b are equal")
Kết quả in ra là:
b is greater than a
Một số điểm quan trọng:
– Đầu tiên, phần điều kiện được đánh giá (a < b), sau đó hoặc là a hoặc là b
sẽ được trả về dựa trên giá trị Boolean được trả về bởi điều kiện đó
– Thứ tự của các đối số truyền vào hàm toán tử sẽ khác nhau đối với các
ngôn ngữ lập trình khác nhau
– Mức độ ưu tiên của các biểu thức điều kiện là thấp nhất trong số tất cả các
toán tử của Python.
4. Phương pháp được sử dụng trước phiên bản 2.5 (khi chưa có tenary
4.1 operator – toán tử ba ngôi)
Trong một biểu thức có dạng giống với ví dụ bên dưới đây, trình thông dịch (interpreter) sẽ kiểm tra biểu thức này, nếu nó là true (đúng) thì on_true sẽ được đánh giá, nếu không thì on_false sẽ được đánh giá.
4.2 Cú pháp:
‘ ‘ ‘ Khi điều kiện là true (đúng), biểu thức [on_false] sẽ không được thực thi và giá trị của “True and [on_true]” sẽ được trả về. Nếu không thì giá trị của “False or [on_false]” sẽ được trả về.
Lưu ý rằng “True and x” sẽ bằng với x, và “False or x” sẽ bằng với x. ‘ ‘ ‘
[expression] and [on_true] or [on_false]
4.3 Ví dụ:
# Program to demonstrate conditional operator
a, b = 10, 20
# If a is less than b, then a is assigned
# else b is assigned (Note : it doesn't
# work if a is 0.
min = a < b and a or b
print(min)
Kết quả in ra là:
10
Lưu ý rằng: Hạn chế duy nhất của phương pháp này là on_true phải không được bằng 0 hoặc False. Nếu on_true bằng 0 hoặc False thì on_false sẽ luôn luôn được đánh giá. Điều này xảy ra là do nếu biểu thức được đánh giá là true (đúng), thì trình thông dịch (interpreter) sẽ kiểm tra on_true, tuy nhiên nếu on_true lại bằng 0 hoặc bằng False, thì điều đó sẽ buộc trình thông dịch phải kiểm tra on_false để đưa ra kết quả cuối cùng của toàn bộ biểu thức.
Nếu bạn thấy hay và hữu ích, bạn có thể tham gia các kênh sau của cafedev để nhận được nhiều hơn nữa:
Chào thân ái và quyết thắng!