Python: if-elif-else, sõnastik ja match-case tingimuslauseid

1. Sissejuhatus

Python on oma lihtsuse ja intuitiivse süntaksi tõttu paljude programmeerijate lemmik, kuid mõned võivad olla üllatunud, et teistes keeltes olemasolevat「switch-case」süntaksit Pythonis ei ole. Seetõttu peab Pythonis kasutama「if-elif-else」või「sõnastiku tüüp(dictionary)」tüüpi, et saavutada sarnane toimimine。 Selles artiklis käsitleme traditsioonilisi tingimuslikke harutamismeetodeid Pythonis, sõnastiku kasutamise alternatiivi ning Python 3.10-s sisse toodud uut「match-case」lauset. See võimaldab teil omandada tõhusaid tingimuslikke harutamismeetodeid Pythonis ja rakendada neid praktilises kodeerimises。

2. Pythoni switch-lause puudumise põhjus

Pythonis ei ole switch-case lauset kasutusel selle lihtsuse ja loetavuse tõttu. Pythoni disainerid on püüdnud teha keele võimalikult lühidaks, eemaldades kordused ja üleliigse süntaksi. Kuigi switch-lause on teiste keelte puhul kasulik, saab Pythoni kasutada ’if-elif-else’ lauseid või sõnastikke sama funktsionaalsuse saavutamiseks, seega pole switch-lause lisamine vajalik. Tegelikult on ka Pythoni ametlikus dokumentatsioonis öeldud, et if-elif-else lauseid kasutades saab katta switch-lause funktsionaalsuse. Allpool on C keeles switch-lause näide.
switch (value) {
  case 1:
    printf("Value is 1");
    break;
  case 2:
    printf("Value is 2");
    break;
  default:
    printf("Other value");
}
Pythoni puhul saab seda ümber kirjutada järgmiselt.
value = 1
if value == 1:
    print("Value is 1")
elif value == 2:
    print("Value is 2")
else:
    print("Other value")
Selle meetodiga saab Python ilma switch-lauseita tingimuslikke harudeid lihtsalt teostada.
RUNTEQ(ランテック)|超実戦型エンジニア育成スクール

3. if-elif-else kasutamise näide

Pythonis tingimuslikku harutamist teostamise kõige põhiline meetod on “if-elif-else” lause. See on väga tõhus, kui soovitakse mitme tingimuse alusel erinevaid toiminguid teha. Allpool on tüüpiline kasutusnäide.
value = 100
if value < 50:
    print("Väike väärtus")
elif value < 100:
    print("Keskmine väärtus")
else:
    print("Suur väärtus")
Selles koodis väljastatakse erinev sõnum sõltuvalt muutuja value väärtusest. if-elif-else lause võimaldab lihtsat ja intuitiivset tingimuslikku harutamist.

Probleemid, kui tingimusi lisandub

Kuid kui if-elif-else lausete sügavus suureneb, võib kood muutuda raskesti loetavaks. Eriti keerukate tingimuste korral on järgmine “sõnastiku tüüp” kasutav meetod tõhus.

4. Tingimuslõigud sõnastiku (dictionary) abil

Pythoni sõnastiku kasutamisega saab rakendada tingimuslõigud, mis sarnanevad switch-case lausega. Sõnastik on andmestruktuur, mis hoiab võtme ja väärtuse paare, võimaldades mitmeid tingimuslõike lühidalt väljendada. Järgnevas näites kuvatakse kasutaja sisestatud numbri põhjal vastav tulemus.
numbers = {1: "üks", 2: "kaks", 3: "kolm"}
value = int(input("Palun sisestage 1–3 vahemikus olev arv: "))

if value in numbers:
    print(f"Valitud arv: {numbers[value]}")
else:
    print("Palun sisestage 1–3 vahemikus olev arv")
Nii saab sõnastiku kasutamisega hoida koodi lühikese ja loetavana ka siis, kui tingimusi on palju.

Sõnastiku eelised

Sõnastikku kasutavad tingimuslõigud säilitavad koodi loetavuse ka siis, kui tingimusi lisandub, ning on seetõttu kergesti hooldatavad. Eriti kui väärtuste töötlemine on mitmekordne, on see tõhusam kui if-elif-else laused.

5. Python 3.10 uus funktsioon: match-case lause kasutuselevõtt

Python 3.10-st alates kasutusele võetud “match-case” lause on süntaksilt väga sarnane switch-case lausetele, võimaldades mitmeid tingimusi lühidalt kirjeldada. See uus funktsioon on eriti tugev mustri sobitamisel ning võrreldes traditsiooniliste if-elif-else lausete või sõnastikute kasutamisega parandab koodi loetavust ja hooldatavust märkimisväärselt.

match-case põhiline süntaks

Allpool on match-case lause põhiline kasutusnäide.
def check_value(value):
    match value:
        case 1:
            print("Üks valiti")
        case 2:
            print("Kaks valiti")
        case _:
            print("Valiti midagi muud kui 1 või 2")
Selles koodis täidetakse erinevad toimingud sõltuvalt muutuja value väärtusest. case _ on vaikimisi toiming, mis käivitatakse, kui ükski tingimus ei vasta.

6. match-case’i rakendused

match-case lause sobib ka keerukamate tingimusharude ja mustri sobitamise jaoks. Näiteks on võimalik teha töötlemist vastavalt loendi elementide arvule või andmetüübile.

Mitme tingimuse toetav match-case lause

def process_data(data):
    match data:
        case [x, y]:
            print(f"Loendis on 2 elementi: {x}, {y}")
        case [x, y, z]:
            print(f"Loendis on 3 elementi: {x}, {y}, {z}")
        case _:
            print("Loendi elementide arv erineb")
Selles näites tehakse loendi elementide arvu põhjal erinevat töötlemist. Match-case lause eripäraks on, et see võimaldab mitut tingimust või mustrit kirjeldada lihtsalt.

7. if-elif-else, sõnastik ja match-case võrdlus

Igal tingimuslõhkumise meetodil on oma eelised ja puudused. Allpool on võrdlustabel.
MeetodEelisedPuudused
if-elif-elseLihtne ja intuitiivneKui tingimusi on palju, muutub kood keeruliseks
Sõnastik (dictionary)Hea loetavus, sobib hästi, kui tingimusi on paljuKõik tingimused ei pruugi sõnastikku mahtuda
match-caseSobib mitme tingimuslõhkumise ja mustri sobitamise jaoksSaadaval ainult alates Python 3.10-st
Selle võrdlustabeli abil on lihtsam valida, milline tingimuslõhkumise meetod on kõige sobivam. Eriti match-case lause on väga sobilik keerukate mustrite sobitamiseks ning võimaldab vältida if-elif-else lausete liigset korduvust.

8. Kokkuvõte

Pythonis ei ole switch‑case lauset, kuid if‑elif‑else lause, sõnastik ja Python 3.10 match‑case lause kasutamine võimaldab tõhusat tingimuslikku harutamist. Eriti match‑case lause on tugev mustri sobitamisel ning võimaldab keerukaid tingimuslikke harutusi kirjutada lihtsasti, mistõttu see on tulevaste arenduste puhul väga kasulik. Tingimustele vastavalt nende meetodite kasutamine võimaldab luua tõhusa ja loetavuse poolest kõrge kvaliteediga koodi. Nii, süvendades iga meetodi mõistmist, saate valida tegeliku projekti jaoks sobivaima lähenemise.
年収訴求