Python mempunyai gaya penulisan yang dipanggil pengendali ternary (operator bersyarat) yang boleh menerangkan proses seperti pernyataan if dalam satu baris.
Perkara berikut diterangkan di sini, bersama dengan kod sampel.
- Penulisan asas pengendali ternary
if ... elif ... else ...
Terangkan perkara ini dalam satu baris- Menggabungkan Notasi Komprehensif Senarai dan Operator Ternary
- Gabungan fungsi tanpa nama (ungkapan lambda) dan pengendali ternary
Lihat artikel berikut untuk mendapatkan maklumat lanjut tentang pernyataan normal if.
Penulisan asas pengendali ternary
Dalam Python, pengendali ternary boleh ditulis seperti berikut
Expression evaluated when the conditional expression is true if conditional expression else Expression evaluated when the conditional expression is false
Jika anda ingin menukar nilai mengikut syarat, hanya tulis setiap nilai sebagaimana adanya.
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
Jika anda ingin menukar pemprosesan mengikut syarat, huraikan setiap ungkapan.
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
Ungkapan yang tidak mengembalikan nilai (ungkapan yang mengembalikan Tiada) juga boleh diterima. Bergantung pada keadaan, salah satu ungkapan dinilai dan prosesnya dilaksanakan.
a = 1
print('even') if a % 2 == 0 else print('odd')
# odd
Bersamaan dengan kod berikut yang ditulis dengan pernyataan if normal.
a = 1
if a % 2 == 0:
print('even')
else:
print('odd')
# odd
Ungkapan bersyarat berbilang juga boleh digabungkan menggunakan operator logik (dan, atau, dsb.).
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 ...Penerangan satu baris
if ... elif ... else ...
Tiada cara istimewa untuk menulis ini pada satu baris. Walau bagaimanapun, ia boleh direalisasikan dengan menggunakan operator ternary lain dalam ungkapan yang dinilai apabila ungkapan bersyarat operator ternary adalah palsu. Imej pengendali ternary bersarang.
Walau bagaimanapun, adalah lebih baik untuk tidak menggunakannya secara meluas kerana ia mengurangkan kebolehbacaan.
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
Ungkapan bersyarat berikut boleh ditafsirkan dalam dua cara berikut, tetapi dianggap sebagai yang pertama (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
Contoh konkrit adalah seperti berikut. Ungkapan pertama dianggap seolah-olah ia adalah yang kedua.
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
Menggabungkan Notasi Komprehensif Senarai dan Operator Ternary
Penggunaan operator ternary yang berguna ialah apabila memproses senarai dalam tatatanda pemahaman senarai.
Dengan menggabungkan operator ternary dan notasi pemahaman senarai, adalah mungkin untuk menggantikan elemen senarai atau melakukan beberapa pemprosesan lain bergantung pada syarat.
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]
Untuk mendapatkan maklumat lanjut tentang notasi pemahaman senarai, lihat artikel berikut.
Gabungan fungsi tanpa nama (ungkapan lambda) dan pengendali ternary
Pengendali ternary, yang boleh diterangkan secara ringkas walaupun dalam fungsi tanpa nama (ungkapan lambda), berguna.
get_odd_even = lambda x: 'even' if x % 2 == 0 else 'odd'
print(get_odd_even(1))
# odd
print(get_odd_even(2))
# even
Ambil perhatian bahawa, walaupun tidak berkaitan dengan pengendali ternary, contoh di atas memberikan nama kepada ungkapan lambda. Oleh itu, alat semakan automatik seperti konvensyen pengekodan Python PEP8 mungkin menjana Amaran.
Ini kerana PEP8 mengesyorkan penggunaan def apabila memberikan nama kepada fungsi.
Konsep PEP8 adalah seperti berikut
- Ungkapan Lambda digunakan untuk menghantar objek boleh dipanggil sebagai argumen, contohnya, tanpa menamakannya
- Dalam ungkapan lambda, gunakan def untuk mentakrifkan mengikut nama