Kui avalduste kirjutamine ühes reas Pythoni ternaarse operaatoriga (tingimusoperaator)

Äri

Pythonil on kirjutamisviis, mida nimetatakse ternaaroperaatoriteks (tingimusoperaatoriteks), millega saab kirjeldada protsessi nagu if-lause ühes reas.

Siin selgitatakse järgmist koos näidiskoodiga.

  • Kolmikoperaatorite põhikirjutamine
  • if ... elif ... else ...Kirjeldage seda ühe reaga
  • Loetelu koondnomenklatuuri ja kolmikoperatsioonide kombineerimine
  • Anonüümsete funktsioonide (lambda-avalduste) ja kolmikoperaatorite kombineerimine

Lisateavet tavalise if-avalduse kohta leiate järgmisest artiklist.

Kolmikoperaatorite põhikirjutamine

Pythonis saab ternaarse operaatori kirjutada järgmiselt

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

Kui soovite väärtusi vastavalt tingimustele vahetada, kirjutage lihtsalt iga väärtus sellisena, nagu see on.

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

Kui soovite töötlemist vastavalt tingimustele ümber lülitada, kirjeldage iga väljendus.

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

Lubatud on ka väljendid, mis ei tagasta väärtust (väljendid, mis tagastavad None). Sõltuvalt tingimusest hinnatakse üks väljenditest ja käivitatakse protsess.

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

Vastab järgmisele koodile, mis on kirjutatud tavalise if-avaldusega.

a = 1

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

Mitut tingimusavaldust saab ka liita, kasutades loogilisi operaatoreid (ja, või 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 ...Ühe rea kirjeldus

if ... elif ... else ...Selle kirjutamiseks ühele reale ei ole mingit erilist viisi. Küll aga saab seda realiseerida, kasutades väljendis teist kolmikoperaatorit, mida hinnatakse, kui kolmikoperaatori tingimusavaldis on vale. Kujutis ternaarse operaatori pesitsemisest.

Siiski võib olla parem, kui seda ei kasutata laialdaselt, sest see vähendab loetavust.

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

Järgnevat tingimusavaldust võib tõlgendada kahel viisil, kuid seda käsitletakse esimesel viisil (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 

Konkreetne näide on järgmine. Esimest väljendit käsitletakse nii, nagu oleks see teine.

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

Loetelu koondnomenklatuuri ja kolmikoperatsioonide kombineerimine

Ternaarne operaator on kasulik kasutada loetelude töötlemisel loetelude mõistes.

Kombineerides ternaarse operaatori ja loendi mõistmise notatsiooni, on võimalik asendada loendi elemente või teostada mõnda muud töötlemist sõltuvalt tingimustest.

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]

Lisateavet nimekirja mõistmise märkimise kohta leiate järgmisest artiklist.

Anonüümsete funktsioonide (lambda-avalduste) ja kolmikoperaatorite kombineerimine

Kasulik on ternaarne operaator, mida saab lühidalt kirjeldada isegi anonüümses funktsioonis (lambda-avalduses).

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

print(get_odd_even(1))
# odd

print(get_odd_even(2))
# even

Pange tähele, et kuigi see ei ole seotud ternaarse operaatoriga, omistab ülaltoodud näide lambda-avaldusele nime. Seetõttu võivad automaatsed kontrollivahendid, nagu Pythoni kodeerimiskonventsioon PEP8, genereerida hoiatuse.

Selle põhjuseks on see, et PEP8 soovitab funktsioonidele nimede määramisel kasutada def-i.

PEP8 kontseptsioon on järgmine

  • Lambda-avaldusi kasutatakse näiteks kutsutavate objektide üleandmiseks argumentidena, ilma neid nimetamata
  • Lambda-avaldustes kasutage def, et defineerida nime järgi
Copied title and URL