Slik bruker du Python Ternary Operator

Denne veiledningen vil lære deg hvordan du bruker den ternære operatoren i Python. Du vil lære syntaksen og kode flere eksempler for å forstå hvordan det fungerer.

Vi starter med å se på hvordan den betingede setningen if-else fungerer, og deretter lærer vi hvordan du skriver et ekvivalent uttrykk ved å bruke den ternære operatoren.

Deretter skal vi kode noen få eksempler og deretter lære hvordan du emulerer oppførselen til Pythons ternære operator ved å bruke en Python-tuppel og ordbok. Til slutt skal vi gjennomgå noen brukstilfeller når du foretrekker å bruke den ternære operatøren.

La oss begynne!

If-Else-erklæringen i Python: En gjennomgang

Du kan kode med ved å starte en Python REPL eller i tipsbilk.net sin online Python-editor.

Den generiske syntaksen til if-else-setningen i Python er som følger:

if condition:
    # do this
else:
    # do this

I utdraget ovenfor angir tilstand tilstanden som skal kontrolleres. Hvis betingelsen evalueres til True, utløses if-blokken. Hvis betingelsen evalueres til False, blir setningene i else-blokken utført.

Her er et eksempel der game_over-variabelen er tildelt en boolsk verdi avhengig av om verdien av energi er mindre enn eller lik null.

  • Hvis energi <= 0, er game_over True.
  • Ellers er game_over falsk.

Følgende kodebit viser hvordan du gjør dette ved å bruke if-else betingede setninger:

energy = -1

if energy <= 0:
    game_over = True
else:
    game_over = False

print(game_over)
# True

I dette eksemplet er energi -1 som er mindre enn 0. Så game_over er sant.

Python ternær operatør: syntaks og eksempler

Python har en ternær operator som fungerer mye som den ternære betingede operatoren i språk som C og C++. Den generelle syntaksen for å bruke den er som følger:

expression1 if condition else expression2

La oss analysere syntaksen ovenfor:

  • tilstand: Tilstanden du skal sjekke etter.
  • expression1: Uttrykket som skal evalueres om betingelsen er True.
  • expression2: Uttrykket som skal evalueres om betingelsen er False.
  Hva er bedre mellom 21:9 vs 16:9-skjermer?

Nå skal vi identifisere hva uttrykk1, uttrykk2 og betingelse skal være fra if-else-versjonen av koden.

Setter vi alt sammen, har vi følgende ved å bruke Pythons ternære operator.

game_over = True if energy <= 0 else False
print(game_over)
# True

La oss kode et annet eksempel. Tenk deg at du driver en bokhandel og du gir leserne rabatt på kjøpet avhengig av hvor ofte de har besøkt butikken din det siste året.

La numVisits angi antall besøk.

  • Hvis numVisits > 7, er rabattprosenten, discount_perc 20.
  • Ellers er rabatt_perc 5.

Vi bruker den ternære operatoren for å tilordne verdi til rabatt_perc-variabelen.

numVisits = 10

discount_perc = 20 if numVisits > 7 else 5

print(discount_perc)
# 20 (as numVisits = 10 which is > 7)

Deretter lærer vi hvordan du emulerer den ternære operatoren ved å bruke en Python-tuppel og en ordbok.

Emulerer den ternære operatøren med Python Tuple

Som alle iterables i Python, følger tuples null indeksering. Så hvis du har to elementer i en tuppel, tuple_name[0] angir det første elementet i tuppelen og tuppelnavnet[1] gir det andre elementet i tupelen.

De grunnleggende datatypene i Python er heltall, float, string og boolsk. Python støtter typecasting som lar deg representere en bestemt datatype ved tilsvarende representasjon i en annen datatype.

Start en Python REPL og kjør følgende eksempler. Hvis du prøver å konvertere heltall til boolske tall, vil du legge merke til følgende:

  • bool(0) er falsk.
  • bool() returnerer True.
>>> bool(0)
False
>>> bool(1)
True
>>> bool(-1)
True
>>> bool(10)
True

På samme måte, når vi kaster boolsk til heltall, har vi følgende:

>>> int(True)
1
>>> int(False)
0

Ved å sette sammen typestøping og indeksering kan vi gjøre som følger:

  • Element ved indeks 0 i tuppelen: Verdien som skal brukes når betingelsen er False.
  • Element ved indeks 1 i tuppelen: Verdien som skal brukes når betingelsen er True.

Ved hjelp av ovenstående har vi følgende:

>>> numVisits = 10
>>> discount_perc = (5,20)[numVisits > 7]
>>> discount_perc
# 20

Her er betingelsen numVisits > 7 True som numVisits er 10. Fordi int(True) er 1, er verdien av rabatt_perc 20, elementet ved indeks 1.

Emulering av den ternære operatøren med Python Dictionary

Du kan angi True og False som nøklene til ordboken. Og du kan angi expression1 og expression2 som verdiene som tilsvarer tastene True og False, henholdsvis.

some_dict = {True: expression1,
             False: expression2
            }

Hva gjør du videre? Nå hvis du bruker some_dict[condition], uttrykk1 som tilsvarer True-nøkkelen evalueres hvis betingelsen er True. Og expression2 blir evaluert når betingelsen er False.

La oss kode rabatt_perc-eksemplet (igjen), men denne gangen ved å bruke en Python-ordbok.

>>> numVisits = 10
>>> discount_dict = {True: 20, False:5}
>>> discount_perc = discount_dict[numVisits > 7]
>>> discount_perc
# 20

Her er numVisits = 10 som er større enn 7. Derfor er betingelsen numVisits > 7 Sann. Så rabatt_dikt[numVisits > 7] evaluerer til rabatt_dikt[True] som er verdien 20.

Bør du alltid bruke Python Ternary Operator?

Så langt har vi lært hvordan vi bruker den ternære operatoren. Men bør vi alltid bruke den ternære operatoren? Vel, den ternære operatøren er kanskje ikke det beste valget for alle brukstilfeller. Denne delen bryter ned når du bør foretrekke å bruke den ternære operatoren fremfor if-else-setninger. Vi vil også dekke når vi bør vurdere å bruke if-else-setningen i stedet for den ternære operatoren.

Mer konsis enn hvis annet blokker

Som nevnt, i Python, er det ternære operatoruttrykket mer kortfattet enn if-else-setningen. Derfor kan du bruke den til å se etter betingelser og evaluere uttrykk betinget i farten.

I følgende eksempel er nums en liste over 100 tilfeldig genererte heltall. For hvert av de 100 tallene sjekker vi om det er oddetall eller partall. Og denne evalueringen skjer inline inne i f-strengen.

import random

nums = [random.choice(range(100)) for i in range(10)]

for num in nums:
    print(f"{num} is {'even' if num%2==0 else 'odd'}")
# sample output

0 is even
56 is even
6 is even
53 is odd
62 is even
7 is odd
8 is even
77 is odd
41 is odd
94 is even

Den ternære operatøren krever Else-klausulen

Når du bruker de betingede if-else-setningene, er else-setningen valgfri. La oss ta et eksempel. Game_over-variabelen settes til True hvis energien faller til en verdi mindre enn eller lik null.

Imidlertid, hvis energien er større enn null, initialiseres aldri game_over-variabelen. Så du vil støte på feil hvis du prøver å få tilgang til game_over-variabelen.

energy = 5
if energy <= 0:
    game_over = True

print(f"Is the game over? {game_over}")
Traceback (most recent call last):
  File "ternary_op.py", line 39, in <module>
    print(f"Is the game over? {game_over}")
NameError: name 'game_over' is not defined

En måte å fikse dette på er å sette game_over til False i utgangspunktet og oppdatere den til True hvis energinivået er mindre enn eller lik null.

energy = 5
game_over = False
if energy <= 0:
    game_over1 = True

print(f"Is the game over? {game_over}")

Men når du bruker den ternære Python-operatoren tilsvarende det ovenfor, er ikke else-setningen valgfri. Den ternære operatoren krever at uttrykket evalueres når betingelsen er falsk.

game_over = True if energy <= 0 else False

Hvis du endrer ovenstående til game_over = True hvis energi <= 0 ved å fjerne den andre delen, vil du få syntaksfeil, som vist:

File "ternary_op.py", line 42
    game_over = True if energy <= 0
                                  ^
SyntaxError: invalid syntax

For å se etter flere forhold, bruk If-Else-erklæringer

Tenk på eksempelet: Hvert spørsmål i et sett med kodende intervjuspørsmål har en tilhørende vanskelighetsscore. Avhengig av denne poengsummen tildeler vi ett av de tre vanskelighetsnivåene: lett, middels eller vanskelig, til et bestemt spørsmål. Anta at vi har følgende:

Poeng vanskelighetsgrad Mindre enn 10 lettMellom 10 og 20 middels Større enn 20 vanskelig

Gitt vanskelighetsgraden, kan du få vanskelighetsgraden ved å bruke den ternære Python-operatoren som vist:

score = 12

difficulty_level = "easy" if score < 10 else "hard" if score > 20 else "medium"

print(difficulty_level)
# medium

Det ternære operatoruttrykket i kodeblokken ovenfor er av følgende form:

expression1 if condition1 else expression2 if condition2 else expression3

Selv om den er kortfattet, er den litt vanskelig å lese og analysere. Følgende bilde viser hvordan kontrollflyten oppstår i dette tilfellet.

Følgende kodebit viser en tilsvarende implementering ved hjelp av if-else-setninger. Som sett er kontrollflyten mye lettere å forstå, og koden er mer lesbar.

if score < 10:
    difficulty_level="easy"
elif score > 20:
    difficulty_level="hard"
else:
    difficulty_level="medium"

print(difficulty_level)

Derfor, når du har flere forhold, bør du bruke if-else-blokkene i stedet for den ternære operatoren. Dette sikrer at koden er lett å lese og forstå.

Når du trenger å utføre flere setninger – avhengig av om betingelsen er sann eller usann – bør du vurdere å bruke if-else-setningen.

Konklusjon

Her er en oppsummering av det du har lært i denne opplæringen.

  • I Python kan den ternære operatoren brukes med følgende syntaks: expression1 if condition else expression2.
  • Du kan etterligne oppførselen til den ternære operatoren ved å bruke Python-tupler og ordbøker.
  • Mens den ternære operatøren kan være et mer kortfattet alternativ til if-else-blokkene, bør du sørge for at koden er lesbar. For å forbedre lesbarheten til koden kan du bruke if-else-setningene i stedet for den ternære operatoren, spesielt når du trenger å kjede flere forhold.

Deretter lærer du å sjekke ut opplæringen om like og ikke like operatorer i Python.