Python Switch-erklæringen

Introduksjon

Switch-setningen er et kraftig og praktisk verktøy for å kontrollere flyten av programmet ditt. Den lar deg raskt og enkelt lage flere kodegrener, avhengig av verdien til en gitt variabel eller et gitt uttrykk. Det brukes ofte når du trenger å utføre forskjellig logikk avhengig av en gitt variabels verdi, som kan ha mer enn 2 (men et endelig antall) verdier.

I denne artikkelen vil vi utforske hvordan du bruker switch-setningen i Python og diskutere fordelene fremfor andre kontrollstrukturer. Enten du er ny på Python eller en erfaren utvikler, kan switch-uttalelsen hjelpe deg med å skrive renere og mer effektiv kode.

Før v3.10

Før Python switch-setningen var naturlig tilgjengelig på språket, måtte programmerere bruke andre kontrollstrukturer for å oppnå samme funksjonalitet. En vanlig tilnærming var å bruke en serie if-else-setninger, hvor hver kodegren ble assosiert med en annen verdi av variabelen som testes.

Tenk for eksempel på følgende kode:

value = "foo"

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

I denne koden bruker vi en if-else-setning for å bestemme hvilken kodegren som skal kjøres basert på verdien av variabelen value. Dersom value er lik "foo", vil den første grenen av koden bli utført. Hvis value er lik "bar", vil den andre kodegrenen bli utført. Ellers vil koden i else blokkering vil bli utført.

Selv om denne tilnærmingen fungerer, kan den fort bli uhåndterlig ettersom antall mulige verdier for variabelen øker. I tillegg kan det gjøre koden vanskelig å lese og forstå.

En annen tilnærming som kan brukes til å lage en bryterlignende uttalelse i Python er å bruke en ordbok. I denne tilnærmingen er nøklene til ordboken de mulige verdiene til variabelen som testes, og verdiene er de tilsvarende kodegrenene.

Tenk for eksempel på følgende kode:

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

I denne koden har vi definert en ordbok kalt switch, med nøkler som representerer de mulige verdiene til variabelen value. For hver nøkkel har vi tildelt en lambda-funksjon som verdien, som inneholder den tilsvarende kodegrenen. For å utføre den aktuelle grenen av kode, bruker vi get() metoden til ordboken, som lar oss spesifisere en standardverdi som skal brukes hvis den gitte nøkkelen ikke finnes i ordboken.

Selv om denne tilnærmingen er mer fleksibel og kompakt enn å bruke if-else-setninger, kan den fortsatt være vanskelig å lese og forstå, spesielt hvis koden i hver gren er kompleks. I tillegg krever det bruk av lambda-funksjoner, noe som kan være forvirrende for noen programmerere. Vi foreslår ikke å bruke denne metoden med mindre du av en eller annen grunn ikke kan bruke de andre metodene i denne artikkelen.

Med introduksjonen av Python switch-setningen i Python v3.10, har programmerere nå en mer praktisk og intuitiv måte å kontrollere flyten av programmene sine basert på verdien av en gitt variabel eller et gitt uttrykk. I neste avsnitt vil vi utforske hvordan du bruker en faktisk brytersetning i Python.

De match/case Erklæring (etter v3.10)

Etter Python v3.10 håndteres switch-setningen ved hjelp av match nøkkelord. Dette nøkkelordet brukes til å lage et mønstersamsvarende uttrykk, som lar deg teste verdien av en gitt variabel eller et gitt uttrykk mot en rekke mønstre. Hvis et samsvar blir funnet, utføres den tilsvarende kodegrenen.

Tenk for eksempel på følgende kode:

value = "foo"

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

Sjekk ut vår praktiske, praktiske guide for å lære Git, med beste praksis, bransjeaksepterte standarder og inkludert jukseark. Slutt å google Git-kommandoer og faktisk lære den!

I denne koden bruker vi match nøkkelord for å lage et mønstersamsvarende uttrykk, som tester verdien til variabelen value mot en rekke mønstre. Hvis value er lik "foo", vil den første grenen av koden bli utført. Hvis value er lik "bar", vil den andre kodegrenen bli utført. Ellers vil koden i else-blokken bli utført.

Faller gjennom

En av de viktigste forskjellene mellom switch-setninger i Python og tradisjonelle switch-setninger på andre språk er at Pythons match uttalelsen støtter ikke fall-through. Med andre ord, når et samsvar er funnet og den tilsvarende kodegrenen er utført, vil den match uttrykket slutter og ingen annen kode i match uttalelsen er utført. På andre språk oppnås dette vanligvis ved å bruke break nøkkelord, som ikke er nødvendig eller støttet her.

Hvis du ønsker å oppnå samme oppførsel som fall-through i en tradisjonell switch-setning, kan du bruke | operatør for å matche flere tilfeller. Denne operatoren lar deg spesifisere flere mønstre i en enkelt case, og alle mønstrene kan matches for å utløse kjøringen av den grenen.

Tenk for eksempel på følgende kode:

value = "y"

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

Her, hvis verdien av value er lik "ja" or "y", den første grenen av kode vil bli utført. Dette tilsvarer fall-through-atferden i en tradisjonell brytersetning.

Mislighold

Som du sikkert har lagt merke til fra eksemplene ovenfor, håndteres "standard"-saken ved å bruke en understrek (_). Dette regnes som "jokertegn" og samsvarer med alle verdier. Hvis en av de foregående tilfellene samsvarer med verdien, hoppes standardkodegrenen over og kjøres ikke.

konklusjonen

Som du kan se, tilbyr Python-match (også kalt "switch")-setningen en kraftig og praktisk måte å kontrollere flyten av programmet på. Enten du er ny på Python eller en erfaren utvikler, kan switch-uttalelsen hjelpe deg med å skrive renere og mer effektiv kode.

Tidstempel:

Mer fra Stackabuse