Python má štýl zápisu nazývaný ternárne operátory (podmienkové operátory), ktoré dokážu opísať proces ako príkaz if na jednom riadku.
Nasledujúci postup je vysvetlený spolu so vzorovým kódom.
- Základný zápis ternárnych operátorov
if ... elif ... else ...
Opíšte to jedným riadkom- Kombinácia komplexného zápisu zoznamu a ternárnych operátorov
- Kombinácia anonymných funkcií (lambda výrazov) a ternárnych operátorov
Viac informácií o normálnom príkaze if nájdete v nasledujúcom článku.
Základný zápis ternárnych operátorov
V jazyku Python možno ternárny operátor zapísať takto
Expression evaluated when the conditional expression is true if conditional expression else Expression evaluated when the conditional expression is false
Ak chcete prepínať hodnoty podľa podmienok, jednoducho zapíšte každú hodnotu tak, ako je.
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
Ak chcete prepínať spracovanie podľa podmienok, opíšte každý výraz.
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
Prípustné sú aj výrazy, ktoré nevracajú hodnotu (výrazy, ktoré vracajú hodnotu None). V závislosti od podmienky sa vyhodnotí jeden z výrazov a vykoná sa proces.
a = 1
print('even') if a % 2 == 0 else print('odd')
# odd
Ekvivalentné nasledujúcemu kódu napísanému pomocou bežného príkazu if.
a = 1
if a % 2 == 0:
print('even')
else:
print('odd')
# odd
Viaceré podmienené výrazy možno tiež spájať pomocou logických operátorov (and, or atď.).
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 ...Jednoriadkový opis
if ... elif ... else ...
Neexistuje žiadny špeciálny spôsob, ako to napísať na jeden riadok. Dá sa však realizovať použitím ďalšieho ternárneho operátora vo výraze, ktorý sa vyhodnotí, keď je podmienený výraz ternárneho operátora nepravdivý. Obrázok vnorenia ternárnych operátorov.
Možno by však bolo lepšie nepoužívať ho vo veľkom rozsahu, pretože znižuje čitateľnosť.
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
Nasledujúci podmienený výraz možno interpretovať dvoma spôsobmi, ale považuje sa za prvý z nich (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
Konkrétny príklad je nasledovný. Prvý výraz sa považuje za druhý.
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ácia komplexného zápisu zoznamu a ternárnych operátorov
Užitočné použitie ternárneho operátora je pri spracovaní zoznamov v notácii s porozumením zoznamu.
Kombináciou ternárneho operátora a zápisu porozumenia zoznamu je možné nahradiť prvky zoznamu alebo vykonať iné spracovanie v závislosti od podmienok.
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]
Viac informácií o zápise porozumenia zoznamu nájdete v nasledujúcom článku.
- SÚVISIACE:Ako používať zoznamy jazyka Python
Kombinácia anonymných funkcií (lambda výrazov) a ternárnych operátorov
Užitočný je ternárny operátor, ktorý sa dá stručne opísať aj v anonymnej funkcii (lambda výraz).
get_odd_even = lambda x: 'even' if x % 2 == 0 else 'odd'
print(get_odd_even(1))
# odd
print(get_odd_even(2))
# even
Všimnite si, že hoci uvedený príklad nesúvisí s ternárnym operátorom, lambda výrazu je priradené meno. Preto môžu nástroje na automatickú kontrolu, ako napríklad kódovacia konvencia PEP8 v jazyku Python, vygenerovať varovanie.
PEP8 totiž odporúča používať def pri priraďovaní názvov funkciám.
Koncepcia PEP8 je nasledovná
- Lambda výrazy sa používajú na odovzdávanie volateľných objektov ako argumentov, napríklad bez ich pomenovania
- V lambda výrazoch použite def na definovanie podľa názvu