Python ima slog pisanja, imenovan ternarni operatorji (pogojni operatorji), ki lahko v eni vrstici opiše postopek, kot je izjava if.
V nadaljevanju je pojasnjeno naslednje, skupaj z vzorčno kodo.
- Osnovno pisanje ternarnih operatorjev
if ... elif ... else ...
To opišite v eni vrstici- Kombiniranje celovitega zapisa seznama in ternarnih operatorjev
- Kombinacija anonimnih funkcij (izrazov lambda) in ternarnih operatorjev
Za več informacij o običajnem stavku if glejte naslednji članek.
Osnovno pisanje ternarnih operatorjev
V Pythonu lahko ternarni operator zapišemo na naslednji način
Expression evaluated when the conditional expression is true if conditional expression else Expression evaluated when the conditional expression is false
Če želite spreminjati vrednosti glede na pogoje, preprosto zapišite vsako vrednost tako, kot 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
Če želite preklopiti obdelavo glede na pogoje, opišite vsak izraz.
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
Sprejemljivi so tudi izrazi, ki ne vračajo vrednosti (izrazi, ki vračajo None). Glede na pogoj se ovrednoti eden od izrazov in izvede postopek.
a = 1
print('even') if a % 2 == 0 else print('odd')
# odd
Enakovredno naslednji kodi, zapisani z običajnim stavkom if.
a = 1
if a % 2 == 0:
print('even')
else:
print('odd')
# odd
Več pogojnih izrazov lahko združite tudi z uporabo logičnih operatorjev (and, or itd.).
- POVEZANO:Pythonovi logični operatorji in, ali, ne (logična konjunkcija, logična disjunkcija, negacija)
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 ...Enovrstični opis
if ... elif ... else ...
Ni posebnega načina, kako to zapisati v eno vrstico. Lahko pa ga uresničimo tako, da v izrazu uporabimo še en ternarni operator, ki se ovrednoti, ko je pogojni izraz ternarnega operatorja napačen. Slika gnezdenja ternarnih operatorjev.
Vendar je morda bolje, da ga ne uporabljate v velikem obsegu, saj zmanjšuje berljivost.
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
Naslednji pogojni izraz je mogoče razlagati na naslednja dva načina, vendar ga obravnavamo kot prvega (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
Konkreten primer je naslednji. Prvi izraz se obravnava, kot da bi bil drugi izraz.
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
Kombiniranje celovitega zapisa seznama in ternarnih operatorjev
Uporabna uporaba trinivojskega operatorja je obdelava seznamov v zapisu za razumevanje seznamov.
S kombinacijo ternarnega operatorja in zapisa za razumevanje seznama je mogoče zamenjati elemente seznama ali opraviti drugo obdelavo glede na pogoje.
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]
Za več informacij o zapisu za razumevanje seznamov glejte naslednji članek.
Kombinacija anonimnih funkcij (izrazov lambda) in ternarnih operatorjev
Uporaben je trojni operator, ki ga je mogoče jedrnato opisati tudi v anonimni funkciji (izraz lambda).
get_odd_even = lambda x: 'even' if x % 2 == 0 else 'odd'
print(get_odd_even(1))
# odd
print(get_odd_even(2))
# even
Upoštevajte, da zgornji primer izrazu lambda dodeli ime, čeprav ni povezan s ternarnim operatorjem. Zato lahko orodja za samodejno preverjanje, kot je Pythonova kodirna konvencija PEP8, ustvarijo opozorilo.
PEP8 namreč priporoča uporabo def pri dodeljevanju imen funkcijam.
Koncept PEP8 je naslednji
- Z izrazi lambda lahko kot argumente posredujete predmete, ki jih je mogoče klicati, ne da bi jih poimenovali.
- V lambda izrazih uporabite def za opredelitev z imenom