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]

Bagaimana itu bekerja
- Dalam tanda kurung, tupel dua elemen dideklarasikan.
- Dalam kurung siku, nilai predikat dihitung.
- 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 menarikCatatan
(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.