Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Toán tử Ba ngôi (Ternary Operator) trong Python


Nhiều ngôn ngữ lập trình hỗ trợ toán tử ba ngôi (ternary operator), về cơ bản định nghĩa một biểu thức điều kiện.

Tương tự, toán tử ba ngôi trong Python được dùng để trả về giá trị dựa trên kết quả của một điều kiện nhị phân. Nó nhận giá trị nhị phân (điều kiện) làm đầu vào, nên nó trông giống như khối điều kiện "if-else". Tuy nhiên, nó cũng trả về giá trị nên hành xử giống như một hàm.

Cú pháp

[on_true] if [expression] else [on_false]

Hãy viết một chương trình đơn giản so sánh hai số nguyên:

a. Sử dụng câu lệnh if-else Python:

>>> x, y = 5, 6
>>> if x > y:
    print("x")
else:
    print("y")
y

b. Sử dụng toán tử ba ngôi:

>>> x, y = 5, 6
>>> print("x" if x > y else "y")
y

Với toán tử ba ngôi, chúng ta có thể viết code trong một dòng. Vì vậy Python cơ bản trước tiên đánh giá điều kiện, nếu true – đánh giá biểu thức đầu tiên, ngược lại đánh giá điều kiện thứ hai.

>>> def find_max(a, b):
    return a if (a > b) else b
>>> find_max(5, 6)
6

Các cách triển khai Toán tử Ba ngôi

Dưới đây là các cách khác nhau để triển khai toán tử ba ngôi.

a. Sử dụng Tuple Python

>>> a, b = random(), random()
>>> (b, a)[a > b]
0.5497848117028667

Trên tương đương với:

>>> (b, a)[True]
0.5065247098746795

Nhưng nếu bạn bối rối giá trị trả về là của 'a' hay 'b'. Hãy viết lại code trên.

>>> (f"b:{b}", f"a:{a}")[a > b]
'b:0.5497848117028667'

b. Sử dụng Dictionary Python

>>> a, b = random(), random()
>>> {False: f"b:{b}", True: f"a:{a}"}[a > b]
'a:0.8089581560973976'

Chúng ta có thể đổi chỗ cặp key-value:

>>> {True: f"a:{a}", False: f"b:{b}"}[a > b]
'a:0.8089581560973976'

c. Sử dụng Lambdas

Chúng ta có thể dùng hàm lambda Python để đóng vai trò như toán tử ba ngôi:

>>> (lambda: f"a:{a}", lambda: f"b:{b}")[a > b]()
'b:0.6780078581465793'

Toán tử Ba ngôi lồng nhau (Nested Python ternary operator)

Hãy thử chuỗi các toán tử này:

>>> from random import random
>>> x = random()
>>> "Less than zero" if x < 0 else "between 0 and 5" if a >= 0 and a <= 5 else "Greater than five"

Kết quả

'between 0 and 5'

Hãy kiểm tra giá trị thực của x:

>>> x
0.08009251123993566