Zápis príkazov if do jedného riadku pomocou ternárneho operátora jazyka Python (podmienkový operátor)

obchodné

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.

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
Copied title and URL