Python có một phong cách viết được gọi là toán tử bậc ba (toán tử có điều kiện) có thể mô tả một quá trình giống như một câu lệnh if trong một dòng duy nhất.
Phần sau được giải thích ở đây, cùng với mã mẫu.
- Cách viết cơ bản của toán tử bậc ba
if ... elif ... else ...
Mô tả điều này trong một dòng- Kết hợp Danh sách Ký hiệu Toàn diện và Toán tử bậc ba
- Sự kết hợp của các hàm ẩn danh (biểu thức lambda) và các toán tử bậc ba
Xem bài viết sau để biết thêm thông tin về câu lệnh if thông thường.
Cách viết cơ bản của toán tử bậc ba
Trong Python, toán tử bậc ba có thể được viết như sau
Expression evaluated when the conditional expression is true if conditional expression else Expression evaluated when the conditional expression is false
Nếu bạn muốn chuyển đổi các giá trị theo điều kiện, chỉ cần viết từng giá trị như nó vốn có.
Value to return if conditional expression is true if conditional expression else Value to return if conditional expression is false
a = 1
result = 'even' if a % 2 == 0 else 'odd'
print(result)
# odd
a = 2
result = 'even' if a % 2 == 0 else 'odd'
print(result)
# even
Nếu bạn muốn chuyển đổi xử lý theo điều kiện, hãy mô tả từng biểu thức.
a = 1
result = a * 2 if a % 2 == 0 else a * 3
print(result)
# 3
a = 2
result = a * 2 if a % 2 == 0 else a * 3
print(result)
# 4
Các biểu thức không trả về giá trị (biểu thức trả về Không có) cũng được chấp nhận. Tùy thuộc vào điều kiện, một trong các biểu thức được đánh giá và quá trình được thực hiện.
a = 1
print('even') if a % 2 == 0 else print('odd')
# odd
Tương đương với đoạn mã sau được viết bằng câu lệnh if thông thường.
a = 1
if a % 2 == 0:
print('even')
else:
print('odd')
# odd
Nhiều biểu thức điều kiện cũng có thể được nối bằng cách sử dụng các toán tử logic (và, hoặc, v.v.).
- CÓ LIÊN QUAN:Toán tử lôgic trong Python và hoặc, không (kết hợp lôgic, ngắt kết hợp lôgic, phủ định)
a = -2
result = 'negative and even' if a < 0 and a % 2 == 0 else 'positive or odd'
print(result)
# negative and even
a = -1
result = 'negative and even' if a < 0 and a % 2 == 0 else 'positive or odd'
print(result)
# positive or odd
if ... elif ... else ...Mô tả một dòng
if ... elif ... else ...
Không có cách đặc biệt nào để viết điều này trên một dòng. Tuy nhiên, nó có thể được thực hiện bằng cách sử dụng một toán tử bậc ba khác trong biểu thức được đánh giá khi biểu thức điều kiện của toán tử bậc ba là sai. Hình ảnh của toán tử bậc ba lồng nhau.
Tuy nhiên, tốt nhất là không nên sử dụng rộng rãi vì nó làm giảm khả năng đọc.
a = 2
result = 'negative' if a < 0 else 'positive' if a > 0 else 'zero'
print(result)
# positive
a = 0
result = 'negative' if a < 0 else 'positive' if a > 0 else 'zero'
print(result)
# zero
a = -2
result = 'negative' if a < 0 else 'positive' if a > 0 else 'zero'
print(result)
# negative
Biểu thức điều kiện sau có thể được hiểu theo hai cách sau, nhưng được coi là biểu thức điều kiện trước (1).
A if condition 1 else B if condition 2 else C
1. A if condition 1 else ( B if condition 2 else C )
2. ( A if condition 1 else B ) if condition 2 else C
Một ví dụ cụ thể như sau. Biểu thức đầu tiên được coi như thể nó là biểu thức thứ hai.
a = -2
result = 'negative' if a < 0 else 'positive' if a > 0 else 'zero'
print(result)
# negative
result = 'negative' if a < 0 else ('positive' if a > 0 else 'zero')
print(result)
# negative
result = ('negative' if a < 0 else 'positive') if a > 0 else 'zero'
print(result)
# zero
Kết hợp Danh sách Ký hiệu Toàn diện và Toán tử bậc ba
Một cách sử dụng hữu ích của toán tử bậc ba là khi xử lý danh sách trong ký hiệu hiểu danh sách.
Bằng cách kết hợp toán tử bậc ba và ký hiệu hiểu danh sách, có thể thay thế các phần tử của danh sách hoặc thực hiện một số xử lý khác tùy thuộc vào điều kiện.
l = ['even' if i % 2 == 0 else i for i in range(10)]
print(l)
# ['even', 1, 'even', 3, 'even', 5, 'even', 7, 'even', 9]
l = [i * 10 if i % 2 == 0 else i for i in range(10)]
print(l)
# [0, 1, 20, 3, 40, 5, 60, 7, 80, 9]
Để biết thêm thông tin về ký hiệu hiểu danh sách, hãy xem bài viết sau.
- CÓ LIÊN QUAN:Cách sử dụng hiểu danh sách Python
Sự kết hợp của các hàm ẩn danh (biểu thức lambda) và các toán tử bậc ba
Toán tử bậc ba, có thể được mô tả ngắn gọn ngay cả trong một hàm ẩn danh (biểu thức lambda), rất hữu ích.
get_odd_even = lambda x: 'even' if x % 2 == 0 else 'odd'
print(get_odd_even(1))
# odd
print(get_odd_even(2))
# even
Lưu ý rằng, mặc dù không liên quan đến toán tử bậc ba, nhưng ví dụ trên sẽ gán tên cho biểu thức lambda. Do đó, các công cụ kiểm tra tự động như quy ước mã hóa PEP8 của Python có thể tạo ra Cảnh báo.
Điều này là do PEP8 khuyến nghị sử dụng def khi gán tên cho các hàm.
Khái niệm về PEP8 như sau
- Ví dụ: các biểu thức Lambda được sử dụng để chuyển các đối tượng có thể gọi làm đối số mà không cần đặt tên cho chúng
- Trong biểu thức lambda, sử dụng def để xác định theo tên