A Python Switch utasítás

Bevezetés

A switch utasítás hatékony és kényelmes eszköz a programfolyamat vezérléséhez. Lehetővé teszi több kódág gyors és egyszerű létrehozását az adott változó vagy kifejezés értékétől függően. Általában akkor használják, ha különböző logikát kell végrehajtania egy adott változó értékétől függően, amely 2-nél több (de véges számú) értékkel rendelkezhet.

Ebben a cikkben megvizsgáljuk, hogyan használhatjuk a switch utasítást Pythonban, és megvitatjuk annak előnyeit más vezérlőstruktúrákkal szemben. Akár új a Python-ban, akár tapasztalt fejlesztő, a switch utasítás segíthet tisztább és hatékonyabb kód írásában.

A v3.10 előtt

Mielőtt a Python switch utasítás natívan elérhető lett volna ezen a nyelven, a programozóknak más vezérlőstruktúrákat kellett használniuk ugyanazon funkciók eléréséhez. Az egyik elterjedt megközelítés az if-else utasítások sorozata volt, ahol a kód minden egyes ága a tesztelt változó különböző értékéhez volt társítva.

Vegyük például a következő kódot:

value = "foo"

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

Ebben a kódban egy if-else utasítást használunk annak meghatározására, hogy a változó értéke alapján melyik kódágat kell végrehajtani. value. Ha value egyenlő a „foo”-val, a kód első ága kerül végrehajtásra. Ha value egyenlő a „bar” értékkel, a kód második ága kerül végrehajtásra. Ellenkező esetben a kód a else blokk végrehajtásra kerül.

Bár ez a megközelítés működik, gyorsan nehézkessé válhat, mivel a változó lehetséges értékeinek száma növekszik. Ezenkívül megnehezítheti a kód olvashatóságát és megértését.

Egy másik megközelítés, amellyel kapcsoló-szerű utasításokat hozhat létre Pythonban, a szótár használata. Ebben a megközelítésben a szótár kulcsai a tesztelt változó lehetséges értékei, az értékek pedig a kód megfelelő ágai.

Vegyük például a következő kódot:

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

Ebben a kódban definiáltunk egy szótárt, melynek neve switch, a változó lehetséges értékeit képviselő kulcsokkal value. Minden kulcshoz egy lambda függvényt rendeltünk értékként, amely a megfelelő kódágat tartalmazza. A megfelelő kódág végrehajtásához használjuk a get() a szótár metódusa, amely lehetővé teszi, hogy megadjunk egy alapértelmezett értéket, amelyet akkor használunk, ha az adott kulcs nem létezik a szótárban.

Bár ez a megközelítés rugalmasabb és kompaktabb, mint az if-else utasítások használata, még mindig nehéz lehet olvasni és megérteni, különösen, ha az egyes ágak kódja összetett. Ezen kívül lambda függvények használatát igényli, ami egyes programozók számára zavaró lehet. Nem javasoljuk ennek a módszernek a használatát, kivéve, ha valamilyen okból nem használhatja a cikkben szereplő többi módszert.

A Python switch utasítás Python v3.10-ben történő bevezetésével a programozók kényelmesebb és intuitívabb módon irányíthatják programjaik folyamatát egy adott változó vagy kifejezés értéke alapján. A következő részben megvizsgáljuk, hogyan lehet tényleges switch utasítást használni a Pythonban.

A match/case Nyilatkozat (a v3.10 után)

A Python v3.10 után a switch utasítás a következővel kezelhető match kulcsszó. Ez a kulcsszó egy mintaillesztő kifejezés létrehozására szolgál, amely lehetővé teszi egy adott változó vagy kifejezés értékének tesztelését egy sor minta alapján. Ha talál egyezést, a kód megfelelő ága lefut.

Vegyük például a következő kódot:

value = "foo"

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

Tekintse meg gyakorlatias, gyakorlati útmutatónkat a Git tanulásához, amely tartalmazza a bevált gyakorlatokat, az iparág által elfogadott szabványokat és a mellékelt csalólapot. Hagyd abba a guglizást a Git parancsokkal, és valójában tanulni meg!

Ebben a kódban a match kulcsszót egy mintaillesztő kifejezés létrehozásához, amely teszteli a változó értékét value minták sorozatával szemben. Ha value egyenlő a „foo”-val, a kód első ága kerül végrehajtásra. Ha value egyenlő a „bar” értékkel, a kód második ága kerül végrehajtásra. Ellenkező esetben az else blokkban lévő kód végrehajtásra kerül.

Kudarcba fullad

Az egyik legfontosabb különbség a Python switch utasításai és a más nyelvek hagyományos switch utasításai között az, hogy a Python match nyilatkozat nem támogatja az átesést. Más szóval, ha egyezés található és a kód megfelelő ága végrehajtódik, a match kifejezés véget ér, és nincs más kód a match utasítás végrehajtásra kerül. Más nyelveken ez általában a break kulcsszó, amelyre itt nincs szükség vagy nem támogatott.

Ha ugyanazt a viselkedést szeretné elérni, mint egy hagyományos switch utasításban az átesés, használhatja a | operátort több eset párosításához. Ez az operátor lehetővé teszi több minta megadását egyetlen helyen case, és bármelyik minta illeszthető az adott ág végrehajtásának elindításához.

Vegyük például a következő kódot:

value = "y"

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

Itt, ha az értéke value egyenlő az "igen"-vel or „y”, a kód első ága kerül végrehajtásra. Ez ekvivalens a hagyományos switch utasítások átesési viselkedésével.

Alapértékek

Amint azt a fenti példákból valószínűleg észrevette, az „alapértelmezett” esetet aláhúzás (_). Ez „helyes karakternek” számít, és minden értéknek megfelel. Ha az előző esetek valamelyike ​​megegyezik az értékkel, akkor az alapértelmezett kódág átugrásra kerül, és nem kerül végrehajtásra.

Következtetés

Amint láthatja, a Python match (más néven „kapcsoló”) utasítás hatékony és kényelmes módot kínál a program folyamának szabályozására. Akár új a Python-ban, akár tapasztalt fejlesztő, a switch utasítás segíthet tisztább és hatékonyabb kód írásában.

Időbélyeg:

Még több Stackabus