Python Switch Statement

Beskrivning

Switch-satsen är ett kraftfullt och bekvämt verktyg för att kontrollera flödet av ditt program. Det låter dig snabbt och enkelt skapa flera grenar av kod, beroende på värdet av en given variabel eller uttryck. Det används ofta när du behöver exekvera olika logik beroende på en given variabels värde, som kan ha fler än 2 (men ett ändligt antal) värden.

I den här artikeln kommer vi att utforska hur man använder switch-satsen i Python och diskutera dess fördelar jämfört med andra kontrollstrukturer. Oavsett om du är ny på Python eller en erfaren utvecklare, kan switch-satsen hjälpa dig att skriva renare och effektivare kod.

Före v3.10

Innan Python switch-satsen var inbyggd tillgänglig på språket, var programmerare tvungna att använda andra kontrollstrukturer för att uppnå samma funktionalitet. Ett vanligt tillvägagångssätt var att använda en serie if-else-satser, där varje kodgren associeras med ett annat värde på variabeln som testas.

Tänk till exempel på följande kod:

value = "foo"

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

I den här koden använder vi en if-else-sats för att bestämma vilken kodgren som ska köras baserat på variabelns värde value. Om value är lika med "foo", kommer den första kodgrenen att exekveras. Om value är lika med "streck", kommer den andra kodgrenen att exekveras. Annars kommer koden i else blocket kommer att utföras.

Även om detta tillvägagångssätt fungerar, kan det snabbt bli otympligt när antalet möjliga värden för variabeln ökar. Dessutom kan det göra koden svår att läsa och förstå.

Ett annat tillvägagångssätt som kan användas för att skapa ett switchliknande uttalande i Python är att använda en ordbok. I detta tillvägagångssätt är nycklarna i ordboken de möjliga värdena för variabeln som testas, och värdena är motsvarande kodgrenar.

Tänk till exempel på följande kod:

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 den här koden har vi definierat en ordbok som heter switch, med nycklar som representerar de möjliga värdena för variabeln value. För varje nyckel har vi tilldelat en lambdafunktion som värdet, som innehåller motsvarande kodgren. För att exekvera lämplig kodgren använder vi get() metod för ordboken, som tillåter oss att ange ett standardvärde att använda om den givna nyckeln inte finns i ordboken.

Även om detta tillvägagångssätt är mer flexibelt och kompakt än att använda if-else-satser, kan det fortfarande vara svårt att läsa och förstå, särskilt om koden i varje gren är komplex. Dessutom kräver det användning av lambda-funktioner, vilket kan vara förvirrande för vissa programmerare. Vi rekommenderar inte att du använder den här metoden om du inte av någon anledning inte kan använda de andra metoderna i den här artikeln.

Med introduktionen av Python switch-satsen i Python v3.10 har programmerare nu ett bekvämare och mer intuitivt sätt att styra flödet av sina program baserat på värdet av en given variabel eller uttryck. I nästa avsnitt kommer vi att utforska hur man använder en faktisk switch-sats i Python.

Smakämnen match/case Uttalande (efter v3.10)

Efter Python v3.10 hanteras switch-satsen med hjälp av match nyckelord. Det här nyckelordet används för att skapa ett mönstermatchande uttryck, som låter dig testa värdet av en given variabel eller uttryck mot en serie mönster. Om en matchning hittas exekveras motsvarande kodgren.

Tänk till exempel på följande kod:

value = "foo"

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

Kolla in vår praktiska, praktiska guide för att lära dig Git, med bästa praxis, branschaccepterade standarder och medföljande fuskblad. Sluta googla Git-kommandon och faktiskt lära Det!

I den här koden använder vi match nyckelord för att skapa ett mönstermatchande uttryck, som testar variabelns värde value mot en rad mönster. Om value är lika med "foo", kommer den första kodgrenen att exekveras. Om value är lika med "streck", kommer den andra kodgrenen att exekveras. Annars kommer koden i else-blocket att exekveras.

Falla igenom

En av de viktigaste skillnaderna mellan switch-satser i Python och traditionella switch-satser på andra språk är att Pythons match uttalande stöder inte fall-through. Med andra ord, när en matchning har hittats och motsvarande kodgren exekveras, match uttrycket slutar och ingen annan kod i match uttalandet körs. På andra språk uppnås detta vanligtvis med hjälp av break nyckelord, som inte behövs eller stöds här.

Om du vill uppnå samma beteende som fall-through i en traditionell switch-sats, kan du använda | operatör för att matcha flera fall. Denna operator låter dig specificera flera mönster i en enda case, och vilket som helst av mönstren kan matchas för att trigga exekveringen av den grenen.

Tänk till exempel på följande kod:

value = "y"

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

Här, om värdet av value är lika med "ja" or "y", den första kodgrenen kommer att exekveras. Detta motsvarar fall-through-beteendet i en traditionell switch-sats.

Standardvärden

Som du säkert har märkt från exemplen ovan, hanteras "standard"-fallet med ett understreck (_). Detta anses vara "jokertecken" och matchar alla värden. Om ett av de tidigare fallen matchar värdet, hoppas standardkodgrenen över och exekveras inte.

Slutsats

Som du kan se, erbjuder Python match (aka "switch") uttalande ett kraftfullt och bekvämt sätt att kontrollera flödet av ditt program. Oavsett om du är ny på Python eller en erfaren utvecklare, kan switch-satsen hjälpa dig att skriva renare och effektivare kod.

Tidsstämpel:

Mer från Stackabuse