Pythoni lüliti avaldus

Sissejuhatus

Lüliti avaldus on võimas ja mugav tööriist programmi voo juhtimiseks. See võimaldab teil kiiresti ja lihtsalt luua mitu koodiharu, olenevalt antud muutuja või avaldise väärtusest. Seda kasutatakse tavaliselt siis, kui peate käivitama erinevat loogikat sõltuvalt antud muutuja väärtusest, millel võib olla rohkem kui 2 (kuid piiratud arv) väärtusi.

Selles artiklis uurime, kuidas Pythonis lülitilauset kasutada, ja arutame selle eeliseid teiste juhtimisstruktuuride ees. Olenemata sellest, kas olete Pythoni uus kasutaja või kogenud arendaja, võib switchi avaldus aidata teil kirjutada puhtamat ja tõhusamat koodi.

Enne v3.10

Enne kui Pythoni lüliti avaldus oli selles keeles algselt saadaval, pidid programmeerijad sama funktsiooni saavutamiseks kasutama muid juhtimisstruktuure. Üks levinud lähenemisviis oli kasutada rida if-else lauseid, kusjuures iga koodiharu seostati testitava muutuja erineva väärtusega.

Näiteks kaaluge järgmist koodi:

value = "foo"

if value == "foo":
    print("foo was selected")
elif value == "bar":
    print("bar was selected")
else:
    print("Nothing valid was selected")

Selles koodis kasutame if-else lauset, et määrata, millist koodiharu muutuja väärtuse põhjal käivitada value. Kui value võrdub "foo", käivitatakse koodi esimene haru. Kui value võrdub "ribaga", käivitatakse koodi teine ​​haru. Vastasel juhul on kood failis else blokk täidetakse.

Kuigi see lähenemisviis töötab, võib muutuja võimalike väärtuste arvu suurenedes muutuda kiiresti kohmakaks. Lisaks võib see muuta koodi lugemise ja mõistmise raskeks.

Teine lähenemisviis, mida saab Pythonis lülititaolise avalduse loomiseks kasutada, on kasutada sõnaraamatut. Selle lähenemisviisi puhul on sõnastiku võtmeteks testitava muutuja võimalikud väärtused ja väärtusteks vastavad koodiharud.

Näiteks kaaluge järgmist koodi:

value = "foo"

switch = {
    "foo": lambda: print("foo was selected"),
    "bar": lambda: print("bar was selected"),
    "default": lambda: print("Nothing valid was selected"),
}

switch.get(value, "default")()

Selles koodis oleme määratlenud sõnastiku nimega switch, klahvidega, mis tähistavad muutuja võimalikke väärtusi value. Iga võtme jaoks oleme määranud väärtuseks lambda funktsiooni, mis sisaldab vastavat koodiharu. Sobiva koodiharu käivitamiseks kasutame get() sõnastiku meetod, mis võimaldab meil määrata vaikeväärtuse, mida kasutada, kui antud võtit sõnastikus ei eksisteeri.

Kuigi see lähenemisviis on paindlikum ja kompaktsem kui if-else lausete kasutamine, võib seda siiski olla raske lugeda ja mõista, eriti kui iga haru kood on keeruline. Lisaks nõuab see lambda funktsioonide kasutamist, mis võib mõne programmeerija jaoks segadusse ajada. Me ei soovita seda meetodit kasutada, välja arvatud juhul, kui te ei saa mingil põhjusel teisi selles artiklis kirjeldatud meetodeid kasutada.

Pythoni lüliti avalduse kasutuselevõtuga Python v3.10-s on programmeerijatel nüüd mugavam ja intuitiivsem viis oma programmide voogu juhtida antud muutuja või avaldise väärtuse alusel. Järgmises jaotises uurime, kuidas Pythonis tegelikku lülitilauset kasutada.

. match/case Avaldus (pärast versiooni 3.10)

Pärast Pythoni versiooni 3.10 käsitletakse switchi lauset kasutades match märksõna. Seda märksõna kasutatakse mustri sobitamise avaldise loomiseks, mis võimaldab testida antud muutuja või avaldise väärtust mustrite seeria suhtes. Kui leitakse sobivus, käivitatakse vastav koodiharu.

Näiteks kaaluge järgmist koodi:

value = "foo"

match value:
    case "foo":
        print("foo was selected")
    case "bar":
        print("bar was selected")
    case _:
        print("Nothing valid was selected")

Tutvuge meie praktilise ja praktilise Giti õppimise juhendiga, mis sisaldab parimaid tavasid, tööstusharus aktsepteeritud standardeid ja kaasas olevat petulehte. Lõpetage Giti käskude guugeldamine ja tegelikult õppima seda!

Selles koodis kasutame match märksõna, et luua mustriga sobiv avaldis, mis testib muutuja väärtust value mustrite seeria vastu. Kui value võrdub "foo", käivitatakse koodi esimene haru. Kui value võrdub "bariga", käivitatakse koodi teine ​​haru. Vastasel juhul käivitatakse muu plokis olev kood.

Luhta minema

Üks peamisi erinevusi Pythoni lülitilausete ja teiste keelte traditsiooniliste lülitilausete vahel on see, et Pythoni match avaldus ei toeta läbikukkumist. Teisisõnu, kui vaste on leitud ja vastav koodiharu käivitatud, siis match avaldis lõpeb ja selles pole muud koodi match avaldus täidetakse. Teistes keeltes saavutatakse see tavaliselt kasutades break märksõna, mida siin ei vajata ega toetata.

Kui soovite saavutada sama käitumist kui traditsioonilise lüliti avalduses, võite kasutada | mitme juhtumi sobitamiseks. See operaator võimaldab teil määrata mitu mustrit ühes case, ja mis tahes mustreid saab sobitada, et käivitada selle haru käivitamine.

Näiteks kaaluge järgmist koodi:

value = "y"

match value:
    case "yes" | "y":
        print("The user confirmed")
    case _:
        print("The user denied")

Siin, kui väärtus value võrdub "jah" or "y", käivitatakse koodi esimene haru. See on samaväärne traditsioonilise lüliti avalduse läbikukkumisega.

Defaults

Nagu olete ülaltoodud näidetest ilmselt märganud, käsitletakse vaikejuhtu allkriipsu (_). Seda peetakse metamärgiks ja see vastab kõigile väärtustele. Kui üks eelmistest juhtudest vastab väärtusele, jäetakse koodi vaikeharu vahele ja seda ei käivitata.

Järeldus

Nagu näete, pakub Pythoni vaste (teise nimega "lüliti") avaldus võimsa ja mugava viisi oma programmi voo juhtimiseks. Olenemata sellest, kas olete Pythoni uus kasutaja või kogenud arendaja, võib switchi avaldus aidata teil kirjutada puhtamat ja tõhusamat koodi.

Ajatempel:

Veel alates Stackabus