Hướng dẫn python ternary multiple conditions - trăn bậc ba nhiều điều kiện

Theo thứ tự nào mà toán tử ternary lồng nhau đánh giá các điều kiện của nó?

Câu trả lời ngắn gọn: Toán tử ternary lồng nhau '1' if x else '2' if y else '3' đánh giá điều kiện từ trái sang phải, tức là, '1' if x else ('2' if y else '3'). Tóm lại, điều kiện đầu tiên đầu tiên! The nested ternary operator '1' if x else '2' if y else '3' evaluates the condition from left to right, i.e., '1' if x else ('2' if y else '3'). In short, first condition first!

Hướng dẫn python ternary multiple conditions - trăn bậc ba nhiều điều kiện

  • Xây dựng vấn đề
  • Làm tổ đơn giản
  • Nhiều tổ
  • Làm thế nào để thao tác với người vận hành ưu tiên?
  • Làm thế nào để các nhà điều hành ternary hoạt động bằng mọi cách?

Xây dựng vấn đề

Làm tổ đơn giản

'1' if x else '2' if y else '3'

Nhiều tổ: What is the operator precedence for the nested ternary operator?

  • Làm thế nào để thao tác với người vận hành ưu tiên?: ('1' if x else '2') if y else '3'
  • Làm thế nào để các nhà điều hành ternary hoạt động bằng mọi cách?: '1' if x else ('2' if y else '3')

Cho một toán tử ternary lồng nhau trong Python: is semantically different to Scenario B as can be seen in this example:

>>> x, y = True, False
>>> # Scenario A
>>> ('1' if x else '2') if y else '3'
'3'
>>> # Scenario B
>>> '1' if x else ('2' if y else '3')
'1'

Làm tổ đơn giản

Nhiều tổ

>>> x, y = True, False

# Scenario A
>>> ('1' if x else '2') if y else '3'
'3'

# Scenario B
>>> '1' if x else ('2' if y else '3')
'1'

# Correct Scenario: B
>>> '1' if x else '2' if y else '3'
'1'

Nhiều tổ

Làm thế nào để thao tác với người vận hành ưu tiên?

'1' if x else '2' if y else '3' if z else '4'

Làm thế nào để các nhà điều hành ternary hoạt động bằng mọi cách?

Cho một toán tử ternary lồng nhau trong Python:

>>> x, y, z = True, True, False

>>> # Scenario A
>>> (('1' if x else '2') if y else '3') if z else '4'
'4'

>>> # Scenario B
>>> '1' if x else ('2' if y else ('3' if z else '4'))
'1'

>>> # Correct Scenario: B
>>> '1' if x else '2' if y else '3' if z else '4'
'1'

Làm thế nào để thao tác với người vận hành ưu tiên?

Làm thế nào để các nhà điều hành ternary hoạt động bằng mọi cách?

Cho một toán tử ternary lồng nhau trong Python:

>>> x, y = True, False
>>> # Normal precedence: first condition first
>>> '1' if x else '2' if y else '3'
'1'
>>> # Force second condition first:
>>> ('1' if x else '2') if y else '3'
'3'

Làm thế nào để các nhà điều hành ternary hoạt động bằng mọi cách?

Cho một toán tử ternary lồng nhau trong Python:

Câu hỏi: Nhà điều hành ưu tiên cho toán tử ternary lồng nhau là gì?

Kịch bản A: ('1' if x else '2') if y else '3': The three operands are written as

>>> x, y = True, False
>>> # Scenario A
>>> ('1' if x else '2') if y else '3'
'3'
>>> # Scenario B
>>> '1' if x else ('2' if y else '3')
'1'
3 which reads as “return
>>> x, y = True, False
>>> # Scenario A
>>> ('1' if x else '2') if y else '3'
'3'
>>> # Scenario B
>>> '1' if x else ('2' if y else '3')
'1'
4 if
>>> x, y = True, False
>>> # Scenario A
>>> ('1' if x else '2') if y else '3'
'3'
>>> # Scenario B
>>> '1' if x else ('2' if y else '3')
'1'
5 else return
>>> x, y = True, False
>>> # Scenario A
>>> ('1' if x else '2') if y else '3'
'3'
>>> # Scenario B
>>> '1' if x else ('2' if y else '3')
'1'
6“. Let’s write this more intuitively as:

Kịch bản B: '1' if x else ('2' if y else '3')
Kịch bản A khác biệt về mặt ngữ nghĩa với kịch bản B như có thể thấy trong ví dụ này:Toán tử ternary đánh giá từ trái sang phải. Nếu toán tử ternary được lồng như trong '1' if x else '2' if y else '3', Python trước tiên sẽ đánh giá điều kiện bên trái trước khi nó đánh giá đúng điều kiện.
Điều gì sẽ xảy ra nếu toán tử ternary có nhiều cấp độ làm tổ như vậy:Một lần nữa, toán tử ternary đánh giá từ trái sang phải. Ngay cả khi toán tử ternary có nhiều hơn hai mức làm tổ như trong
>>> x, y = True, False
>>> # Scenario A
>>> ('1' if x else '2') if y else '3'
'3'
>>> # Scenario B
>>> '1' if x else ('2' if y else '3')
'1'
2, Python trước tiên đánh giá điều kiện bên trái trước khi đánh giá điều kiện bên trái trước khi đánh giá điều kiện bên trái thứ ba.
Điều gì sẽ xảy ra nếu toán tử ternary có nhiều cấp độ làm tổ như vậy:Một lần nữa, toán tử ternary đánh giá từ trái sang phải. Ngay cả khi toán tử ternary có nhiều hơn hai mức làm tổ như trong
>>> x, y = True, False
>>> # Scenario A
>>> ('1' if x else '2') if y else '3'
'3'
>>> # Scenario B
>>> '1' if x else ('2' if y else '3')
'1'
2, Python trước tiên đánh giá điều kiện bên trái trước khi đánh giá điều kiện bên trái trước khi đánh giá điều kiện bên trái thứ ba.
Điều gì sẽ xảy ra nếu toán tử ternary có nhiều cấp độ làm tổ như vậy:Một lần nữa, toán tử ternary đánh giá từ trái sang phải. Ngay cả khi toán tử ternary có nhiều hơn hai mức làm tổ như trong
>>> x, y = True, False
>>> # Scenario A
>>> ('1' if x else '2') if y else '3'
'3'
>>> # Scenario B
>>> '1' if x else ('2' if y else '3')
'1'
2, Python trước tiên đánh giá điều kiện bên trái trước khi đánh giá điều kiện bên trái trước khi đánh giá điều kiện bên trái thứ ba.

Bạn có thể thấy điều này trong ví dụ sau:

Bạn có thể thao tác với toán tử bình thường ưu tiên cho toán tử ternary bằng cách sử dụng dấu ngoặc đơn phù hợp. Bằng cách bao quanh một thuật ngữ trong một dấu ngoặc đơn, bạn buộc Python phải đánh giá biểu thức theo thứ tự được chỉ định. Bằng cách này, bạn có thể buộc Python, ví dụ, để đánh giá điều kiện thứ hai trước điều kiện đầu tiên của toán tử ternary.

  • Đây là một ví dụ:

Hướng dẫn python ternary multiple conditions - trăn bậc ba nhiều điều kiện

Toán tử ternary cơ bản nhất

>>> x, y = True, False
>>> # Scenario A
>>> ('1' if x else '2') if y else '3'
'3'
>>> # Scenario B
>>> '1' if x else ('2' if y else '3')
'1'
3 bao gồm ba toán hạng
>>> x, y = True, False
>>> # Scenario A
>>> ('1' if x else '2') if y else '3'
'3'
>>> # Scenario B
>>> '1' if x else ('2' if y else '3')
'1'
4,
>>> x, y = True, False
>>> # Scenario A
>>> ('1' if x else '2') if y else '3'
'3'
>>> # Scenario B
>>> '1' if x else ('2' if y else '3')
'1'
5 và
>>> x, y = True, False
>>> # Scenario A
>>> ('1' if x else '2') if y else '3'
'3'
>>> # Scenario B
>>> '1' if x else ('2' if y else '3')
'1'
6. Đó là một biểu thức với giá trị trả về. Toán tử ternary trả về
>>> x, y = True, False
>>> # Scenario A
>>> ('1' if x else '2') if y else '3'
'3'
>>> # Scenario B
>>> '1' if x else ('2' if y else '3')
'1'
4 nếu biểu thức boolean
>>> x, y = True, False
>>> # Scenario A
>>> ('1' if x else '2') if y else '3'
'3'
>>> # Scenario B
>>> '1' if x else ('2' if y else '3')
'1'
5 đánh giá thành
>>> x, y = True, False
>>> # Scenario A
>>> ('1' if x else '2') if y else '3'
'3'
>>> # Scenario B
>>> '1' if x else ('2' if y else '3')
'1'
9. Mặt khác, nếu biểu thức
>>> x, y = True, False
>>> # Scenario A
>>> ('1' if x else '2') if y else '3'
'3'
>>> # Scenario B
>>> '1' if x else ('2' if y else '3')
'1'
5 đánh giá thành
>>> x, y = True, False

# Scenario A
>>> ('1' if x else '2') if y else '3'
'3'

# Scenario B
>>> '1' if x else ('2' if y else '3')
'1'

# Correct Scenario: B
>>> '1' if x else '2' if y else '3'
'1'
1, toán tử ternary trả về phương án thay thế
>>> x, y = True, False
>>> # Scenario A
>>> ('1' if x else '2') if y else '3'
'3'
>>> # Scenario B
>>> '1' if x else ('2' if y else '3')
'1'
6.

Nhà điều hành Python Ternary-và một hack một lớp lót đáng ngạc nhiên

Cú pháp: Ba toán hạng được viết là

>>> x, y = True, False
>>> # Scenario A
>>> ('1' if x else '2') if y else '3'
'3'
>>> # Scenario B
>>> '1' if x else ('2' if y else '3')
'1'
3 đọc dưới dạng trả về
>>> x, y = True, False
>>> # Scenario A
>>> ('1' if x else '2') if y else '3'
'3'
>>> # Scenario B
>>> '1' if x else ('2' if y else '3')
'1'
4 nếu
>>> x, y = True, False
>>> # Scenario A
>>> ('1' if x else '2') if y else '3'
'3'
>>> # Scenario B
>>> '1' if x else ('2' if y else '3')
'1'
5 khác trả về
>>> x, y = True, False
>>> # Scenario A
>>> ('1' if x else '2') if y else '3'
'3'
>>> # Scenario B
>>> '1' if x else ('2' if y else '3')
'1'
6. Hãy để viết điều này một cách trực quan hơn như: