Python Switch -lausunto

esittely

Kytkinlause on tehokas ja kätevä työkalu ohjelman kulun ohjaamiseen. Sen avulla voit nopeasti ja helposti luoda useita koodihaaroja tietyn muuttujan tai lausekkeen arvosta riippuen. Sitä käytetään yleisesti, kun sinun on suoritettava eri logiikkaa tietyn muuttujan arvon mukaan, jolla voi olla enemmän kuin 2 (mutta rajallinen määrä) arvoja.

Tässä artikkelissa tutkimme kytkinkäskyn käyttöä Pythonissa ja keskustelemme sen eduista muihin ohjausrakenteisiin verrattuna. Olitpa uusi Python-käyttäjä tai kokenut kehittäjä, switch-lause voi auttaa sinua kirjoittamaan selkeämpää ja tehokkaampaa koodia.

Ennen v3.10

Ennen kuin Python switch -lauseke oli natiivisti saatavilla tällä kielellä, ohjelmoijien oli käytettävä muita ohjausrakenteita saavuttaakseen samat toiminnot. Yksi yleinen lähestymistapa oli käyttää sarjaa if-else-lauseita, jolloin jokainen koodin haara yhdistettiin testattavan muuttujan eri arvoon.

Harkitse esimerkiksi seuraavaa koodia:

value = "foo"

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

Tässä koodissa käytämme if-else-käskyä määrittämään, mikä koodihaara suoritetaan muuttujan arvon perusteella. value. Jos value on yhtä kuin "foo", koodin ensimmäinen haara suoritetaan. Jos value on yhtä suuri kuin "bar", koodin toinen haara suoritetaan. Muussa tapauksessa koodi else lohko suoritetaan.

Vaikka tämä lähestymistapa toimii, siitä voi nopeasti tulla hankala, kun muuttujan mahdollisten arvojen määrä kasvaa. Lisäksi se voi vaikeuttaa koodin lukemista ja ymmärtämistä.

Toinen tapa, jolla Pythonissa voidaan luoda kytkimen kaltainen lauseke, on käyttää sanakirjaa. Tässä lähestymistavassa sanakirjan avaimet ovat testattavan muuttujan mahdolliset arvot ja arvot vastaavat koodin haarat.

Harkitse esimerkiksi seuraavaa koodia:

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")()

Tässä koodissa olemme määrittäneet sanakirjan nimeltä switch, jossa avaimet edustavat muuttujan mahdollisia arvoja value. Jokaiselle avaimelle olemme määrittäneet arvoksi lambda-funktion, joka sisältää vastaavan koodihaan. Suorittaaksemme sopivan koodin haaran käytämme get() sanakirjan menetelmä, jonka avulla voimme määrittää oletusarvon käytettäväksi, jos annettua avainta ei ole sanakirjassa.

Vaikka tämä lähestymistapa on joustavampi ja kompaktimpi kuin if-else -lauseiden käyttäminen, sitä voi silti olla vaikea lukea ja ymmärtää, varsinkin jos kunkin haaran koodi on monimutkainen. Lisäksi se vaatii lambda-toimintojen käyttöä, mikä voi olla hämmentävää joillekin ohjelmoijille. Emme suosittele tämän menetelmän käyttöä, ellet jostain syystä voi käyttää muita tämän artikkelin menetelmiä.

Python switch -käskyn käyttöönoton myötä Python v3.10:ssä ohjelmoijat voivat nyt helpommin ja intuitiivisemmin ohjata ohjelmiensa kulkua tietyn muuttujan tai lausekkeen arvon perusteella. Seuraavassa osiossa tutkimme kuinka käyttää todellista kytkinlausetta Pythonissa.

- match/case Lausunto (version 3.10 jälkeen)

Python v3.10:n jälkeen kytkinkäskyä käsitellään käyttämällä match avainsana. Tätä avainsanaa käytetään luomaan mallia vastaava lauseke, jonka avulla voit testata tietyn muuttujan tai lausekkeen arvoa mallisarjaan verrattuna. Jos vastaavuus löytyy, vastaava koodihaara suoritetaan.

Harkitse esimerkiksi seuraavaa koodia:

value = "foo"

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

Tutustu käytännönläheiseen, käytännölliseen Gitin oppimisoppaaseemme, jossa on parhaat käytännöt, alan hyväksymät standardit ja mukana tuleva huijauslehti. Lopeta Git-komentojen googlailu ja oikeastaan oppia se!

Tässä koodissa käytämme match avainsanalla luodaksesi mallia vastaava lauseke, joka testaa muuttujan arvon value kuviosarjaa vastaan. Jos value on yhtä kuin "foo", koodin ensimmäinen haara suoritetaan. Jos value on yhtä suuri kuin "bar", koodin toinen haara suoritetaan. Muussa tapauksessa muu-lohkossa oleva koodi suoritetaan.

Putoaminen läpi

Yksi tärkeimmistä eroista Pythonin switch-käskyjen ja muiden kielten perinteisten kytkinkäskyjen välillä on, että Pythonin match lausunto ei tue putoamista. Toisin sanoen, kun vastaavuus on löydetty ja vastaava koodihaara suoritetaan, match lauseke päättyy eikä siinä ole muuta koodia match lausunto suoritetaan. Muilla kielillä tämä saavutetaan yleensä käyttämällä break avainsana, jota ei tarvita tai tueta täällä.

Jos haluat saavuttaa saman käyttäytymisen kuin putoaminen perinteisessä kytkinlauseessa, voit käyttää | operaattori vastaamaan useita tapauksia. Tämän operaattorin avulla voit määrittää useita kuvioita yhdessä case, ja mikä tahansa kuvioista voidaan sovittaa käynnistämään kyseisen haaran suorittamisen.

Harkitse esimerkiksi seuraavaa koodia:

value = "y"

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

Tässä, jos arvo value on yhtä kuin "kyllä" or "y", koodin ensimmäinen haara suoritetaan. Tämä vastaa perinteisen vaihtokäskyn putoamiskäyttäytymistä.

Oletukset

Kuten olet luultavasti huomannut yllä olevista esimerkeistä, "oletus"-tapaus käsitellään alaviivalla (_). Tätä pidetään "jokerimerkkinä" ja se vastaa kaikkia arvoja. Jos jokin edellisistä tapauksista vastaa arvoa, oletuskoodihaara ohitetaan eikä suoriteta.

Yhteenveto

Kuten näet, Python match (alias "kytkin") -lause tarjoaa tehokkaan ja kätevän tavan hallita ohjelman kulkua. Olitpa uusi Python-käyttäjä tai kokenut kehittäjä, switch-lause voi auttaa sinua kirjoittamaan selkeämpää ja tehokkaampaa koodia.

Aikaleima:

Lisää aiheesta Stackabus