A Python rendelkezik egy terner operátoroknak (feltételes operátoroknak) nevezett írásmóddal, amely egyetlen sorban képes leírni egy olyan folyamatot, mint egy if utasítás.
A következőket itt magyarázzuk el, mintakóddal együtt.
- A terner operátorok alapvető írása
if ... elif ... else ...
Írja le ezt egy sorban- Kombináló lista Átfogó jelölés és háromértékű operátorok
- Névtelen függvények (lambda-kifejezések) és terner operátorok kombinálása
A normál if utasítással kapcsolatos további információkért lásd a következő cikket.
A terner operátorok alapvető írása
Pythonban a terner operátor a következőképpen írható le
Expression evaluated when the conditional expression is true if conditional expression else Expression evaluated when the conditional expression is false
Ha az értékeket a feltételeknek megfelelően szeretné váltogatni, egyszerűen írja le az egyes értékeket úgy, ahogy vannak.
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
Ha a feldolgozást feltételek szerint szeretné váltani, írja le az egyes kifejezéseket.
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
Az olyan kifejezések, amelyek nem adnak vissza értéket (a None-t visszaadó kifejezések) szintén elfogadhatók. A feltételtől függően az egyik kifejezés kiértékelésre kerül, és a folyamat végrehajtásra kerül.
a = 1
print('even') if a % 2 == 0 else print('odd')
# odd
Egyenértékű a következő, normál if utasítással írt kóddal.
a = 1
if a % 2 == 0:
print('even')
else:
print('odd')
# odd
Több feltételes kifejezés is összekapcsolható logikai operátorok (és, vagy stb.) használatával.
- KAPCSOLÓDÓ:Python logikai operátorok and, or, not (logikai konjunkció, logikai diszjunkció, negáció)
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 ...Egysoros leírás
if ... elif ... else ...
Nincs különösebb módja annak, hogy ezt egy sorba írjuk. Megvalósítható azonban úgy, hogy egy másik terner operátort használunk a kifejezésben, amely akkor kerül kiértékelésre, ha a terner operátor feltételes kifejezése hamis. A terner operátorok egymásba ágyazásának képe.
A legjobb azonban lehet, ha nem használjuk széles körben, mert csökkenti az olvashatóságot.
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
A következő feltételes kifejezést a következő kétféleképpen lehet értelmezni, de az előbbi (1) szerint kezeljük.
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
Egy konkrét példa a következő. Az első kifejezést úgy tekintjük, mintha a második lenne.
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
Kombináló lista Átfogó jelölés és háromértékű operátorok
A terner operátor hasznos felhasználási módja a listák feldolgozása a listamegértés jelölésében.
A terner operátor és a listamegértés jelölés kombinálásával lehetőség van egy lista elemeinek cseréjére vagy más, a feltételektől függő feldolgozásra.
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]
A listák megértésének jelölésével kapcsolatos további információkért lásd a következő cikket.
Névtelen függvények (lambda-kifejezések) és terner operátorok kombinálása
Hasznos a terner operátor, amely akár egy névtelen függvényben (lambda kifejezésben) is tömören leírható.
get_odd_even = lambda x: 'even' if x % 2 == 0 else 'odd'
print(get_odd_even(1))
# odd
print(get_odd_even(2))
# even
Vegyük észre, hogy a fenti példa – bár nem kapcsolódik a terner operátorhoz – nevet rendel a lambda kifejezéshez. Ezért az automatikus ellenőrző eszközök, például a Python PEP8 kódolási konvenciója figyelmeztetést generálhat.
Ennek oka, hogy a PEP8 a def használatát ajánlja a függvények nevének hozzárendelésekor.
A PEP8 koncepciója a következő
- A lambda-kifejezések arra szolgálnak, hogy hívható objektumokat adjunk át argumentumként, például anélkül, hogy megneveznénk őket.
- A lambda-kifejezésekben használjuk a def-et a név szerinti definiáláshoz.