En Innføring i Ternære Operatorer i Python
Denne veiledningen gir en detaljert forklaring på hvordan du bruker den ternære operatoren i Python. Vi vil utforske syntaksen, se på praktiske eksempler for å fremheve funksjonaliteten, og lære om dens anvendelsesområder.
Vi starter med å repetere hvordan `if-else`-setninger fungerer, for deretter å vise hvordan du kan oppnå samme resultat med den ternære operatoren.
Deretter ser vi på noen kodeeksempler og utforsker alternative måter å etterligne den ternære operatorens oppførsel ved å bruke Python-tupler og ordbøker. Til slutt skal vi diskutere situasjoner der det er fordelaktig å bruke ternære operatorer.
La oss sette i gang!
Gjennomgang av `if-else`-setninger i Python
Du kan eksperimentere med kodeeksemplene ved å bruke en Python REPL eller en online Python-editor som tipsbilk.net sin.
Den generelle strukturen for en `if-else`-setning i Python ser slik ut:
if betingelse: # Utfør denne koden else: # Utfør denne koden
I kodesnutten ovenfor, representerer `betingelse` den logiske testen som utføres. Hvis `betingelse` evalueres til `True`, kjøres koden i `if`-blokken. Hvis den evalueres til `False`, utføres koden i `else`-blokken.
Her er et eksempel der variabelen `game_over` settes til en boolsk verdi basert på om verdien av `energi` er mindre enn eller lik null:
- Hvis `energi` <= 0, blir `game_over` satt til `True`.
- Ellers blir `game_over` satt til `False`.
Følgende kode viser hvordan dette kan implementeres med en `if-else`-setning:
energi = -1 if energi <= 0: game_over = True else: game_over = False print(game_over) # Output: True
I dette tilfellet er `energi` satt til -1, som er mindre enn 0. Derfor er `game_over` satt til `True`.
Syntaks og Eksempler på Ternære Operatorer i Python
Python har en ternær operator som ligner den betingede operatoren i språk som C og C++. Den grunnleggende syntaksen er som følger:
uttrykk1 if betingelse else uttrykk2
La oss bryte ned syntaksen:
- `betingelse`: Den logiske testen som skal evalueres.
- `uttrykk1`: Uttrykket som evalueres hvis betingelsen er `True`.
- `uttrykk2`: Uttrykket som evalueres hvis betingelsen er `False`.
La oss nå identifisere hva `uttrykk1`, `uttrykk2` og `betingelse` vil være fra `if-else`-versjonen av koden.
Ved å sette alt sammen kan vi skrive følgende kode ved hjelp av Pythons ternære operator:
game_over = True if energi <= 0 else False print(game_over) # Output: True
La oss ta et annet eksempel. Forestill deg at du driver en bokhandel og tilbyr rabatter avhengig av hvor ofte kunder har besøkt butikken det siste året.
La `numVisits` representere antall besøk:
- Hvis `numVisits` > 7, er rabattprosenten, `discount_perc`, 20.
- Ellers er `discount_perc` 5.
Vi kan bruke den ternære operatoren for å tilordne verdien til variabelen `discount_perc`:
numVisits = 10 discount_perc = 20 if numVisits > 7 else 5 print(discount_perc) # Output: 20 (siden numVisits = 10 som er > 7)
Nå skal vi utforske hvordan den ternære operatoren kan etterlignes med tupler og ordbøker.
Emulere den Ternære Operatoren med Tupler
Tupler i Python er null-indeksert. Det vil si at det første elementet i en tuppel kalles med indeks 0, det andre elementet med indeks 1, osv.
De grunnleggende datatypene i Python inkluderer heltall, flyttall, strenger og boolske verdier. Python støtter typekonvertering, som lar oss konvertere en datatype til en annen.
Hvis du starter en Python REPL og prøver å konvertere heltall til boolske verdier, vil du legge merke til følgende:
- `bool(0)` returnerer `False`.
- `bool(
)` returnerer `True`.
>>> bool(0) False >>> bool(1) True >>> bool(-1) True >>> bool(10) True
Tilsvarende, når vi konverterer boolske verdier til heltall, får vi følgende:
>>> int(True) 1 >>> int(False) 0
Ved å kombinere typekonvertering og indeksering, kan vi gjøre følgende:
- Elementet ved indeks 0 i tuppelen: Verdien som brukes når betingelsen er `False`.
- Elementet ved indeks 1 i tuppelen: Verdien som brukes når betingelsen er `True`.
Med utgangspunkt i dette har vi følgende:
>>> numVisits = 10 >>> discount_perc = (5,20)[numVisits > 7] >>> discount_perc # Output: 20
Her er betingelsen `numVisits > 7` `True` siden `numVisits` er 10. Siden `int(True)` er 1, blir verdien av `discount_perc` 20, som er elementet ved indeks 1.
Emulere den Ternære Operatoren med Ordbøker
Du kan definere `True` og `False` som nøkler i en ordbok, og tilordne `uttrykk1` og `uttrykk2` som verdiene som tilsvarer henholdsvis `True` og `False`:
some_dict = {True: uttrykk1, False: uttrykk2 }
Hvis du nå bruker `some_dict[betingelse]`, vil `uttrykk1` bli evaluert hvis betingelsen er `True`, og `uttrykk2` vil bli evaluert hvis betingelsen er `False`.
La oss kode `discount_perc`-eksemplet igjen, men denne gangen ved hjelp av en ordbok:
>>> numVisits = 10 >>> discount_dict = {True: 20, False:5} >>> discount_perc = discount_dict[numVisits > 7] >>> discount_perc # Output: 20
Her er `numVisits` satt til 10, som er større enn 7. Derfor er `numVisits > 7` `True`. Dermed evalueres `discount_dict[numVisits > 7]` til `discount_dict[True]`, som er verdien 20.
Bør du Alltid Bruke den Ternære Operatoren?
Vi har nå sett hvordan vi bruker den ternære operatoren, men spørsmålet er: bør vi alltid bruke den? Den ternære operatoren er ikke alltid det beste valget. I dette avsnittet ser vi på situasjoner der du bør foretrekke ternære operatorer fremfor `if-else`-setninger og omvendt.
Mer Konsis enn `if-else`-blokker
Som tidligere nevnt, er den ternære operatoren mer konsis enn en `if-else`-setning. Du kan bruke den til å sjekke betingelser og evaluere uttrykk i en enkelt linje.
I det følgende eksemplet er `nums` en liste med 10 tilfeldig genererte heltall. For hvert tall sjekker vi om det er partall eller oddetall. Denne evalueringen skjer i samme linje som f-strengen:
import random nums = [random.choice(range(100)) for i in range(10)] for num in nums: print(f"{num} er {'partall' if num%2==0 else 'oddetall'}")
# Eksempel på output 0 er partall 56 er partall 6 er partall 53 er oddetall 62 er partall 7 er oddetall 8 er partall 77 er oddetall 41 er oddetall 94 er partall
Den Ternære Operatoren Krever En `else`-klausul
Når du bruker betingede `if-else`-setninger, er `else`-setningen valgfri. La oss se på et eksempel. Variabelen `game_over` settes til `True` hvis energien faller til en verdi som er mindre enn eller lik null.
Hvis derimot energien er større enn null, blir `game_over`-variabelen aldri initialisert. Du vil derfor få en feilmelding hvis du prøver å bruke `game_over`-variabelen.
energi = 5 if energi <= 0: game_over = True print(f"Er spillet over? {game_over}")
Traceback (most recent call last): File "ternary_op.py", line 39, in <module> print(f"Er spillet over? {game_over}") NameError: name 'game_over' is not defined
En måte å løse dette på er å sette `game_over` til `False` i utgangspunktet og deretter oppdatere den til `True` hvis energinivået er mindre enn eller lik null.
energi = 5 game_over = False if energi <= 0: game_over1 = True print(f"Er spillet over? {game_over}")
Men når du bruker den ternære operatoren, er ikke `else`-delen valgfri. Den ternære operatoren krever at et uttrykk evalueres når betingelsen er `False`:
game_over = True if energi <= 0 else False
Hvis du endrer koden over til `game_over = True if energi <= 0` ved å fjerne `else`-delen, vil du få en syntaksfeil, som vist:
File "ternary_op.py", line 42 game_over = True if energi <= 0 ^ SyntaxError: invalid syntax
Bruk `if-else`-setninger for å Sjekke Flere Betingelser
La oss se på dette eksemplet: Hvert spørsmål i et sett med intervjuoppgaver har en vanskelighetsgrad. Avhengig av denne poengsummen, gir vi en av tre vanskelighetsgrader til hvert spørsmål: lett, middels eller vanskelig. Anta at vi har følgende:
Poeng | Vanskelighetsgrad |
Mindre enn 10 | Lett |
Mellom 10 og 20 | Middels |
Større enn 20 | Vanskelig |
Gitt en poengsum, kan du finne vanskelighetsgraden ved å bruke den ternære operatoren:
score = 12 difficulty_level = "lett" if score < 10 else "vanskelig" if score > 20 else "middels" print(difficulty_level) # Output: middels
Det ternære uttrykket i koden ovenfor har denne formen:
uttrykk1 if betingelse1 else uttrykk2 if betingelse2 else uttrykk3
Selv om den er konsis, er den litt vanskelig å lese. Følgende bilde viser hvordan kontrollflyten oppstår i dette tilfellet.
Følgende kode viser hvordan det samme kan implementeres ved hjelp av `if-else`-setninger. Som du ser er kontrollflyten enklere å forstå, og koden er mer lesbar:
if score < 10: difficulty_level="lett" elif score > 20: difficulty_level="vanskelig" else: difficulty_level="middels" print(difficulty_level)
Når du har flere betingelser, bør du derfor bruke `if-else`-blokker fremfor den ternære operatoren. Dette sørger for 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 også vurdere å bruke en `if-else`-setning.
Konklusjon
Her er en oppsummering av det vi har gått gjennom:
- I Python kan den ternære operatoren brukes med følgende syntaks: `uttrykk1 if betingelse else uttrykk2`.
- Du kan etterligne oppførselen til den ternære operatoren med tupler og ordbøker.
- Selv om den ternære operatoren kan være mer konsis enn `if-else`-blokker, bør du sørge for at koden er lett å lese. For å forbedre lesbarheten kan du bruke `if-else`-setninger i stedet, spesielt når du trenger å kombinere flere betingelser.
Nå kan du sjekke ut opplæringen om hvordan du bruker lik og ikke-lik operatorer i Python.