Sådan bruges Python Ternary Operator

Denne guide vil lære dig, hvordan du bruger den ternære operator i Python. Du vil lære syntaksen og kode adskillige eksempler for at forstå, hvordan det fungerer.

Vi starter med at gennemgå, hvordan den betingede if-else-udsagn fungerer og lærer derefter, hvordan man skriver et tilsvarende udtryk ved hjælp af den ternære operator.

Dernæst vil vi kode et par eksempler og derefter lære, hvordan man emulerer adfærden af ​​Pythons ternære operator ved hjælp af en Python-tuple og ordbog. Til sidst vil vi gennemgå et par brugssager, når du foretrækker at bruge den ternære operator.

Lad os begynde!

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

Du kan kode med ved at starte en Python REPL eller i toadmin.dk’ online Python-editor.

Den generiske syntaks for if-else-sætningen i Python er som følger:

if condition:
    # do this
else:
    # do this

I ovenstående uddrag angiver betingelse den betingelse, der skal kontrolleres. Hvis betingelsen evalueres til Sand, udløses if-blokken. Hvis betingelsen evalueres til False, udføres sætningerne inde i else-blokken.

Her er et eksempel, hvor game_over-variablen tildeles en boolsk værdi afhængigt af, om værdien af ​​energi er mindre end eller lig med nul.

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

Følgende kodestykke viser, hvordan du gør dette ved at bruge de betingede if-else-udsagn:

energy = -1

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

print(game_over)
# True

I dette eksempel er energi -1, hvilket er mindre end 0. Så game_over er sandt.

Python ternær operatør: Syntaks og eksempler

Python har en ternær operator, der fungerer meget som den ternære betingede operator i sprog som C og C++. Den generelle syntaks for at bruge det er som følger:

expression1 if condition else expression2

Lad os analysere ovenstående syntaks:

  • tilstand: Den tilstand, der skal tjekkes efter.
  • expression1: Udtrykket, der skal evalueres, om betingelsen er Sand.
  • expression2: Udtrykket, der skal evalueres, om betingelsen er falsk.

Nu vil vi identificere, hvad udtryk1, udtryk2 og betingelse skal være fra if-else-versionen af ​​koden.

  8 bedste e-ordinationssoftware til læger i 2022

Når vi sætter det hele sammen, har vi følgende ved hjælp af Pythons ternære operator.

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

Lad os kode et andet eksempel. Antag, at du driver en boghandel, og du giver læserne rabat på deres køb, afhængigt af hvor ofte de har besøgt din butik inden for det sidste år.

Lad numVisits angive antallet af besøg.

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

Vi bruger den ternære operator til at tildele værdi til variablen discount_perc.

numVisits = 10

discount_perc = 20 if numVisits > 7 else 5

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

Dernæst lærer vi, hvordan man emulerer den ternære operator ved hjælp af en Python-tuple og en ordbog.

Emulering af den ternære operatør med Python Tuple

Som alle iterables i Python følger tuples nul indeksering. Så hvis du har to elementer i en tuple, tuple_name[0] angiver det første element i tuple og tuple_name[1] giver det andet element i tuplet.

De grundlæggende datatyper i Python er heltal, float, streng og Boolean. Python understøtter typecasting, der lader dig repræsentere en bestemt datatype ved dens tilsvarende repræsentation i en anden datatype.

Start en Python REPL og kør følgende eksempler. Hvis du prøver at konvertere heltal til booleanske tal, vil du bemærke følgende:

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

På samme måde, når vi caster Boolean til heltal, har vi følgende:

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

Ved at sammensætte typestøbningen og indekseringen kan vi gøre som følger:

  • Element ved indeks 0 i tuple: Værdien, der skal bruges, når betingelsen er Falsk.
  • Element ved indeks 1 i tuplen: Værdien, der skal bruges, når betingelsen er Sand.

Ved hjælp af ovenstående har vi følgende:

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

Her er betingelsen numVisits > 7 Sand, da numVisits er 10. Fordi int(True) er 1, er værdien af ​​discount_perc 20, elementet ved indeks 1.

Emulering af den ternære operatør med Python Dictionary

Du kan indstille Sand og Falsk som nøglerne til ordbogen. Og du kan indstille udtryk1 og udtryk2 som de værdier, der svarer til henholdsvis nøglerne True og False.

some_dict = {True: expression1,
             False: expression2
            }

Hvad gør du så? Hvis du nu bruger some_dict[condition], expression1, der svarer til True-nøglen, evalueres, hvis betingelsen er True. Og expression2 evalueres, når betingelsen er falsk.

Lad os kode discount_perc-eksemplet (igen), men denne gang ved hjælp af en Python-ordbog.

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

Her er numVisits = 10, hvilket er større end 7. Derfor er betingelsen numVisits > 7 Sand. Så discount_dict[numVisits > 7] evaluerer til discount_dict[True] hvilket er værdien 20.

Skal du altid bruge Python Ternary Operator?

Indtil videre har vi lært, hvordan man bruger den ternære operator. Men skal vi altid bruge den ternære operator? Tja, den ternære operatør er muligvis ikke det bedste valg til alle brugssager. Dette afsnit opdeler, hvornår du foretrækker at bruge den ternære operator frem for if-else-sætninger. Vi vil også dække, hvornår vi bør overveje at bruge if-else-sætningen i stedet for den ternære operator.

Mere kortfattet end hvis-andet-blokke

Som nævnt er det ternære operatorudtryk i Python mere kortfattet end if-else-sætningen. Derfor kan du bruge den til at tjekke for betingelser og evaluere udtryk betinget i farten.

I det følgende eksempel er nums en liste med 100 tilfældigt genererede heltal. For hvert af de 100 tal tjekker vi, om det er ulige eller lige. Og denne evaluering sker inline inde 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ør kræver Else-klausulen

Når du bruger de betingede if-else-sætninger, er else-sætningen valgfri. Lad os tage et eksempel. Game_over-variablen er sat til True, hvis energien falder til en værdi mindre end eller lig med nul.

Men hvis energien er større end nul, initialiseres game_over-variablen aldrig. Så du vil løbe ind i fejl, hvis du prøver at få adgang til game_over-variablen.

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åde at løse dette på er at sætte game_over til False initialt og opdatere det til True, hvis energiniveauet er mindre end eller lig med nul.

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

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

Men når du bruger den ternære Python-operator, der svarer til ovenstående, er else-sætningen ikke valgfri. Den ternære operator kræver, at udtrykket evalueres, når betingelsen er falsk.

game_over = True if energy <= 0 else False

Hvis du ændrer ovenstående til game_over = True, hvis energi <= 0 ved at fjerne den anden del, vil du løbe ind i syntaksfejl, som vist:

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

Brug If-Else-erklæringer for at kontrollere for flere tilstande

Overvej eksemplet: Hvert spørgsmål i et sæt kodende interviewspørgsmål har en tilhørende sværhedsgrad. Afhængigt af denne score tildeler vi et af de tre sværhedsgrader: let, medium eller hårdt til et bestemt spørgsmål. Antag at vi har følgende:

Score Sværhedsgrad Mindre end 10 letMellem 10 og 20 medium Større end 20 hårdt

I betragtning af sværhedsgraden kan du få dens sværhedsgrad ved at bruge den ternære Python-operator som vist:

score = 12

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

print(difficulty_level)
# medium

Det ternære operatorudtryk i ovenstående kodeblok er af følgende form:

expression1 if condition1 else expression2 if condition2 else expression3

Selvom det er kortfattet, er det lidt svært at læse og analysere. Det følgende billede viser, hvordan kontrolflowet opstår i dette tilfælde.

Følgende kodestykke viser en tilsvarende implementering ved hjælp af if-else-sætninger. Som det ses, er kontrolflowet meget lettere at forstå, og koden er mere læsbar.

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 betingelser, bør du bruge if-else-blokkene i stedet for den ternære operator. Dette sikrer, at koden er let at læse og forstå.

Når du skal udføre flere sætninger – afhængigt af om betingelsen er sand eller falsk – bør du også overveje at bruge if-else-sætningen.

Konklusion

Her er en opsummering af, hvad du har lært i denne tutorial.

  • I Python kan den ternære operator bruges med følgende syntaks: expression1 if condition else expression2.
  • Du kan efterligne opførselen af ​​den ternære operator ved at bruge Python-tupler og ordbøger.
  • Mens den ternære operator kan være et mere kortfattet alternativ til if-else-blokkene, bør du sikre dig, at koden er læsbar. For at forbedre kodens læsbarhed kan du bruge if-else-sætningerne i stedet for den ternære operator, især når du skal sammenkæde flere forhold.

Dernæst skal du lære at tjekke selvstudiet om lige og ikke lige operatorer i Python.