If-lausekkeiden kirjoittaminen yhdellä rivillä Pythonin ternäärisellä operaattorilla (ehdollinen operaattori)

liiketoiminta

Pythonissa on kirjoitustyyli, jota kutsutaan ternäärisiksi operaattoreiksi (ehdollisiksi operaattoreiksi), joilla voidaan kuvata if-lauseen kaltainen prosessi yhdellä rivillä.

Seuraavat asiat selitetään tässä yhdessä esimerkkikoodin kanssa.

  • Kolmiulotteisten operaattoreiden peruskirjoitus
  • if ... elif ... else ...Kuvaile tämä yhdellä rivillä
  • Luettelon yhdistäminen Kattava merkintätapa ja ternääriset operaattorit
  • Nimettömien funktioiden (lambda-lausekkeiden) ja ternääristen operaattoreiden yhdistelmä.

Seuraavassa artikkelissa on lisätietoja normaalista if-lausekkeesta.

Kolmiulotteisten operaattoreiden peruskirjoitus

Pythonissa ternäärinen operaattori voidaan kirjoittaa seuraavasti

Expression evaluated when the conditional expression is true if conditional expression else Expression evaluated when the conditional expression is false

Jos haluat vaihtaa arvoja ehtojen mukaan, kirjoita jokainen arvo sellaisenaan.

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

Jos haluat vaihtaa käsittelyä ehtojen mukaan, kuvaa kukin lauseke.

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

Myös lausekkeet, jotka eivät palauta arvoa (lausekkeet, jotka palauttavat None), ovat hyväksyttäviä. Ehdosta riippuen jokin lausekkeista arvioidaan ja prosessi suoritetaan.

a = 1
print('even') if a % 2 == 0 else print('odd')
# odd

Vastaava kuin seuraava koodi, joka on kirjoitettu tavallisella if-lauseella.

a = 1

if a % 2 == 0:
    print('even')
else:
    print('odd')
# odd

Useita ehdollisia lausekkeita voidaan myös ketjuttaa käyttämällä loogisia operaattoreita (and, or jne.).

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 ...Yksirivinen kuvaus

if ... elif ... else ...Ei ole mitään erityistä tapaa kirjoittaa tämä yhdelle riville. Se voidaan kuitenkin toteuttaa käyttämällä lausekkeessa toista ternääristä operaattoria, joka arvioidaan, kun ternäärisen operaattorin ehdollinen lauseke on epätosi. Kuva ternaaristen operaattoreiden lomittamisesta.

Sitä ei ehkä kuitenkaan kannata käyttää laajasti, koska se heikentää luettavuutta.

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

Seuraava ehdollinen lauseke voidaan tulkita kahdella eri tavalla, mutta sitä käsitellään ensimmäisenä (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 

Konkreettinen esimerkki on seuraava. Ensimmäistä lauseketta pidetään ikään kuin se olisi toinen.

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

Luettelon yhdistäminen Kattava merkintätapa ja ternääriset operaattorit

Ternäärisen operaattorin hyödyllinen käyttötapa on listojen käsittely listan ymmärtämisen merkintätavalla.

Yhdistämällä ternäärioperaattori ja listan ymmärtämisen merkintätapa on mahdollista korvata listan elementtejä tai suorittaa jokin muu käsittely olosuhteista riippuen.

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]

Lisätietoja luettelon ymmärtämisen merkintätavoista on seuraavassa artikkelissa.

Nimettömien funktioiden (lambda-lausekkeiden) ja ternääristen operaattoreiden yhdistelmä.

Ternäärinen operaattori, joka voidaan kuvata ytimekkäästi jopa anonyymissä funktiossa (lambda-lausekkeessa), on hyödyllinen.

get_odd_even = lambda x: 'even' if x % 2 == 0 else 'odd'

print(get_odd_even(1))
# odd

print(get_odd_even(2))
# even

Huomaa, että vaikka se ei liity ternäärioperaattoriin, edellä olevassa esimerkissä lambda-lausekkeelle annetaan nimi. Siksi automaattiset tarkistustyökalut, kuten Pythonin koodauskonvention PEP8, saattavat tuottaa varoituksen.

Tämä johtuu siitä, että PEP8 suosittelee def:n käyttöä, kun funktioille annetaan nimiä.

PEP8:n käsite on seuraava

  • Lambda-lausekkeita käytetään esimerkiksi kutsuttavien objektien välittämiseen argumentteina ilman niiden nimeämistä.
  • Käytä lambda-lausekkeissa def määritelläksesi nimellä