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.).
- RELATED:Pythonin loogiset operaattorit and, or, not (looginen konjunktio, looginen disjunktio, negaatio).
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ä