Bentuk alternatif dari operator ternary Python

Baru-baru ini saya menemukan alternatif untuk konstruksi standar " expression_on_true jika predikat else expression_on_false ", yang belum saya lihat di direktori:

(expression_on_false, expression_on_true)[predicate]

gambar

Bagaimana itu bekerja


  1. Dalam tanda kurung, tupel dua elemen dideklarasikan.
  2. Dalam kurung siku, nilai predikat dihitung.
  3. Sebuah tuple diakses pada indeks 1 (jika nilai predikat Benar) atau 0 (jika nilai predikat Salah)

Mari kita lihat sebuah contoh


Misalkan kita memiliki sebuah , dan kita perlu untuk mencetak โ€œpositifโ€ jika nomor tersebut tidak kurang dari nol, atau โ€œnagativeโ€ jika jumlahnya kurang dari nol.


>>> a = 101
>>> ("negative", "positive")[a >= 0]
'positive'
>>> a = -42
>>> ("negative", "positive")[a >= 0]
'negative'
>>> a = 0
>>> ("negative", "positive")[a >= 0]
'positive'

Dalam kasus pertama, 101> = 0, sehingga predikat mengembalikan True. Saat pengindeksan, True berubah menjadi 1, jadi panggilan masuk ke elemen dengan indeks 1. Dalam kasus kedua, sama: predikat False, panggilan masuk ke elemen dengan indeks 0.

Konstruksi ("negatif", "positif") [a> = 0] setidaknya dan tidak jauh lebih pendek dari "positif" jika a> = 0 lain "positif" , tapi saya masih menemukan fitur ini menarik

Catatan


(terima kasih kepada Dasdy )
Jika alih-alih konstanta kita mengganti ekspresi ke dalam tuple, yang hanya satu yang harus dieksekusi, maka konstruksi ini kehilangan maknanya.

All Articles