Hoe je Switch gebruikt in Python: een definitieve gids met voorbeelden en alternatieven

Laatste update: 8 juli 2025
  • De traditionele schakelaar bestaat niet in Python, maar deze kan effectief worden nagebootst met behulp van voorwaarden en woordenboeken.
  • Vanaf Python 3.10 vervangt de nieuwe match-case-constructie de klassieke switch-case, wat zorgt voor meer kracht en leesbaarheid.
  • Er zijn verschillende technieken waarmee u multiple-choicelogica in Python kunt implementeren, zodat u deze kunt aanpassen aan verschillende scenario's en taalversies.

Schakelen in Python-voorbeelden

Heb je je ooit afgevraagd hoe je eenvoudig en efficiënt met meerdere voorwaarden in Python kunt omgaan? Als je met talen als C, Java of JavaScript hebt gewerkt, heb je vast en zeker de bekende schakelkast om te kiezen tussen verschillende opties op basis van de waarde van een variabele. In Python bestond dit klassieke mechanisme echter nog niet... tot voor kort. Hoewel ontwikkelaars jarenlang naar alternatieven hebben moeten zoeken, biedt de taal nu een moderne en krachtige oplossing.

Dit artikel is de ultieme gids om te leren hoe u het switch-equivalent in Python kunt gebruiken.Ontdek de meest robuuste alternatieven in oudere versies, leg uit waarom het in de beginfase niet is opgenomen en leer hoe je schonere, beter leesbare code schrijft, ongeacht welke versie je gebruikt. Maak je klaar om alle trucs, voorbeelden en belangrijkste verschillen te leren bij het implementeren van meerdere conditionals binnen het Python-ecosysteem.

Bestaat de schakelaar in Python? Geschiedenis en redenen voor de afwezigheid ervan

De switch-case, die in veel talen aanwezig is, is pas officieel in Python verschenen vanaf versie 3.10. De belangrijkste reden is filosofisch: de makers van Python hebben zich altijd ingezet voor eenvoud en leesbaarheid. Ze geloofden dat de introductie van een nieuwe switch-syntaxis de zaken zou kunnen compliceren, dus de als-elif-anders was voldoende om die leemte op te vullen. Bovendien was er nooit consensus over de ideale syntaxis. Sterker nog, verschillende officiële voorstellen (PEP 275, PEP 3103) werden afgewezen vanwege een gebrek aan overeenstemming en omdat velen de bestaande alternatieven voldoende duidelijk en krachtig vonden.

Jarenlang heeft de community het ontbreken van switches gecompenseerd door gebruik te maken van een reeks voorwaarden en woordenboeken. Het spreekt voor zich dat het onderwerp tot discussie leidde, maar verre van een onoverkomelijk nadeel: deze benaderingen zijn flexibel en zeer aanpasbaar gebleken. Naarmate de projecten complexer werden, ontstond er echter steeds meer behoefte aan een elegantere oplossing.

Wat is een schakelaarbehuizing en waar wordt deze voor gebruikt?

El schakelkast Het is een besturingsstructuur die in veel talen wordt gebruikt om verschillende codeblokken uit te voeren op basis van de waarde van een variabele of expressie. Met andere woorden, het stelt je in staat om op een overzichtelijke en eenvoudige manier één optie te selecteren uit vele mogelijke opties, zonder eindeloze reeksen voorwaarden.

Typische voorbeelden van gebruik zijn: het weergeven van de naam van een dag van de week op basis van een getal, het toekennen van cijfers, het kiezen van bewerkingen op basis van gebruikersinvoer, enz. In talen zoals C of Java is de syntaxis ervan eenvoudig:

switch(valor) {
    case 1:
        // acción
        break;
    case 2:
        // otra acción
        break;
    default:
        // acción por defecto
}

In Python bestond deze klassieke structuur tot voor kort niet, waardoor ontwikkelaars vindingrijk moesten zijn om hetzelfde resultaat te bereiken.

De komst van de switch in Python: de match-case statement (sinds Python 3.10)

Met de release van versie 3.10 heeft Python een langverwachte functie geïntegreerd: de match-case-uitspraak. Hoewel de syntaxis ervan doet denken aan de traditionele switch-case, is het in werkelijkheid veel krachtiger, omdat het patroonherkenning (patroonherkenning), waarmee niet alleen eenvoudige waarden vergeleken kunnen worden, maar ook complexe structuren, tupels, klassen, lijsten, woordenboeken, etc.

Python's match-case wordt als volgt geschreven:

def ejemplo_switch(x):
    match x:
        case 1:
            return "uno"
        case 2:
            return "dos"
        case _:
            return "desconocido"

Het onderstrepingsteken (_) fungeert als een joker en is het equivalent van verzuim In andere talen wordt de code uitgevoerd als er geen enkel eerder patroon overeenkomt.

Waarom is het zo krachtig? Omdat u complexe patronen kunt ontvangen, variabelen kunt vastleggen, tupels of objecten kunt openen en zelfs guards kunt gebruiken om extra voorwaarden toe te voegen na de case:

match dato:
    case (a, b) if a > b:
        print("El primer elemento es mayor que el segundo")
    case (a, b):
        print(f"Valores: {a}, {b}")

Bovendien verbetert deze structuur in Python 3.10 en hoger de leesbaarheid, het onderhoud en de schaalbaarheid van uw code, vooral bij het verwerken van veel gevallen.

  Alles over instanties in programmeren

Alternatieven om over te schakelen in Python voor oudere versies

Vóór de komst van luciferdoosje, komen ontwikkelaars met even geldige alternatieven. De twee meest voorkomende zijn het gebruik van if-elif-else-ketens en mapping met behulp van woordenboekenLaten we het eens nader bekijken:

1. Gebruik van if-elif-else

De meest directe en eenvoudig te begrijpen oplossing is om voorwaarden aan elkaar te koppelen met behulp van if, elif en else. Op deze manier kunt u alle mogelijke waarden voor een variabele afdekken en het bijbehorende codeblok uitvoeren. Om bijvoorbeeld de dag van de week weer te geven op basis van een getal:

dia = 4
if dia == 1:
    print('lunes')
elif dia == 2:
    print('martes')
elif dia == 3:
    print('miércoles')
elif dia == 4:
    print('jueves')
elif dia == 5:
    print('viernes')
elif dia == 6:
    print('sábado')
elif dia == 7:
    print('domingo')
else:
    print('error')

Voordelen van deze aanpak:

  • Eenvoudige en gemakkelijk leesbare code.
  • Je hebt geen andere speciale structuren nodig; het is puur Python.
  • Elk type vergelijking kan worden gebruikt, niet alleen gelijkheid.

Nadelen van de if-elif-else ladder:

  • Neiging tot herhalende code. Je moet de variabele in iedere vergelijking herhalen, wat een hoop onnodige tekst genereert als je veel gevallen hebt.
  • Minder efficiënt als er een groot aantal voorwaarden is. Als de zaak afgerond is, worden alle voorgaande zaken beoordeeld voordat de zaak wordt behandeld.
  • Moeilijkheden bij het dynamisch toevoegen of verwijderen van zaken.

2. Woordenboeken gebruiken om switch-case te simuleren

Een typisch Python-achtige manier om schakelaars te simuleren is door gebruik te maken van woordenboeken. Het idee is simpel: je koppelt elke mogelijke waarde (sleutel) aan de bijbehorende functie of actie (waarde). Vervolgens zoek je de functie op in het woordenboek en voer je deze uit:

def lunes():
    print('lunes')
def martes():
    print('martes')
def error():
    print('error')

switch_semana = {
    1: lunes,
    2: martes,
    # ... otros días ...
}
dia = 8
switch_semana.get(dia, error)()

Voordelen van deze methode:

  • Compacte en eenvoudig uitbreidbare code.
  • Zeer snelle toegang tot de juiste functie. Het woordenboek maakt gebruik van hashing, waardoor zoeken vrijwel direct gebeurt.
  • Hiermee kunt u dezelfde functie aan meerdere toetsen toewijzen (bijvoorbeeld om zaken te groeperen).
  • De schakelaar kan tijdens runtime worden gewijzigd.

nadelen:

  • Hiervoor is het nodig dat eerst alle bijbehorende functies worden gedefinieerd, wat bij eenvoudige handelingen lastig kan zijn.
  • Het is alleen mogelijk om vergelijkingen te maken op basis van gelijkheid (het werkt niet voor intervallen, bereiken, etc.).
  • Het is niet bedoeld voor gevallen met complexere voorwaardelijke logica binnen elke selectie.

Verschil tussen if-elif-else en switch (of match-case)

De interne werking van een if-elif-else-keten verschilt van die van een switch. In if-elif-else worden de voorwaarden één voor één geëvalueerd, van boven naar beneden, totdat de eerste voorwaarde waar is. Als de gezochte waarde dus aan het begin staat, wordt de uitvoering snel uitgevoerd; als deze aan het einde staat, duurt het langer.

Traditionele switches (en het woordenboek als alternatief in Python) gebruiken vaak opzoektabellen, waardoor de toegang uniformer is, ongeacht het aantal instanties of hun positie. luciferdoosje en woordenboeken is de toegangstijd veel homogener.

Wanneer moet je welk alternatief kiezen?

Er is geen universele oplossing; het beste gereedschap hangt af van het specifieke probleem.

  • Voor een klein aantal voorwaarden of complexe logica in elke tak is if-elif-else de meest eenvoudige keuze. Het laat elke vergelijking toe en is zeer flexibel.
  • Wanneer u veel gevallen hebt en elk geval een specifieke actie uitvoert, kunt u vertrouwen op woordenboeken. De code is overzichtelijker, schaalbaar en gemakkelijker te onderhouden.
  • Als u Python 3.10 of hoger gebruikt, luciferdoosje Het is de beste optie voor helderheid en kracht. Hiermee kunt u de elegantie van de schakelaar combineren met de kracht van patroonherkenning bij complexe structuren.

Denk altijd na over de leesbaarheid, prestaties en onderhoudbaarheid van uw code.

Praktische voorbeelden van het gebruik van switch in Python en de alternatieven daarvoor

Laten we eens naar een aantal voorbeelden kijken waarin elk van deze alternatieven wordt toegepast, van de laagste tot de hoogste complexiteit:

Voorbeeld 1: Cijfer berekenen op basis van een score

# Usando if-elif-else
puntuacion = 85
if puntuacion >= 90:
    print('Sobresaliente')
elif puntuacion >= 80:
    print('Notable')
elif puntuacion >= 70:
    print('Bien')
else:
    print('Insuficiente')

Dit geval is perfect voor het gebruik van voorwaarden, omdat u met intervallen werkt en niet met vaste waarden.

Voorbeeld 2: Weekdag weergeven met een nummer (met woordenboek)

# Definición de funciones para cada día
def lunes():
    print('lunes')
def martes():
    print('martes')
def miercoles():
    print('miércoles')
def jueves():
    print('jueves')
def viernes():
    print('viernes')
def sabado():
    print('sábado')
def domingo():
    print('domingo')
def error():
    print('error')
switch_semana = {
    1: lunes,
    2: martes,
    3: miercoles,
    4: jueves,
    5: viernes,
    6: sabado,
    7: domingo
}
dia = 8
switch_semana.get(dia, error)()

Voorbeeld 3: Match-case gebruiken om rekenkundige bewerkingen te selecteren

operacion = 'suma'
a = 10
b = 5
match operacion:
    case 'suma':
        print(a + b)
    case 'resta':
        print(a - b)
    case 'multiplicacion':
        print(a * b)
    case 'division':
        print(a / b)
    case _:
        print('Operación no válida')

Zoals u ziet, is de syntaxis eenvoudig en zeer duidelijk. De onderstrepingsteken geeft de standaard hoofdlettergevoeligheid aan.

  Polymorfisme in objectgeoriënteerd programmeren

Geavanceerd voorbeeld: patroonherkenning met match-case

De grote kracht van luciferdoosjes is de mogelijkheid om met complexe patronen te werken. U kunt bijvoorbeeld tupels, lijsten, woordenboeken, objecten en dergelijke parseren.

punto = (3, 5)
match punto:
    case (0, 0):
        print('Origen')
    case (0, y):
        print(f'Eje Y en {y}')
    case (x, 0):
        print(f'Eje X en {x}')
    case (x, y):
        print(f'Coordenadas X={x}, Y={y}')

Je kunt zelfs de clausule gebruiken if (bewaker) om aan elk geval extra voorwaarden toe te voegen.

Prestatieverschillen tussen if-elif-else, woordenboeken en match-case

In de meeste gevallen is het prestatieverschil bij normale scripts verwaarloosbaar. Wanneer er echter een groot aantal alternatieven is, kunnen woordenboeken en match-case efficiënter zijn, omdat ze het aantal vergelijkingen verminderen. De belangrijkste factor is echter meestal de leesbaarheid en onderhoudbaarheid van de code, in plaats van micro-optimalisaties die in echte projecten zelden het verschil maken.

Gebruik de techniek die de code duidelijker maakt en fouten voorkomt.

Creatieve oplossingen: klassen en contextmanagers om schakelaars na te bootsen

Sommige ontwikkelaars hebben gespecialiseerde klassen gecreëerd waarmee het klassieke schakelgedrag kan worden nagebootst, inclusief geavanceerde opties zoals het toevoegen breken om de uitvoering van opeenvolgende cases te beheren, cases te groeperen, vergelijkingen aan te passen of de strikte modus in te schakelen om ervoor te zorgen dat slechts één branch wordt uitgevoerd.

Er kan bijvoorbeeld een aangepaste contextmanager worden geïmplementeerd die een syntaxis gebruikt die sterk lijkt op die van andere talen:

class switch:
    def __init__(self, variable, comparator=None, strict=False):
        self.variable = variable
        self.matched = False
        self.matching = False
        if comparator:
            self.comparator = comparator
        else:
            self.comparator = lambda x, y: x == y
        self.strict = strict
    def __enter__(self):
        return self
    def __exit__(self, exc_type, exc_val, exc_tb):
        pass
    def case(self, expr, break_=False):
        if self.strict:
            if self.matched:
                return False
            if self.matching or self.comparator(self.variable, expr):
                if not break_:
                    self.matching = True
                else:
                    self.matched = True
                    self.matching = False
                return True
            else:
                return False
        else:
            if self.matching or self.comparator(self.variable, expr):
                if not break_:
                    self.matching = True
                else:
                    self.matched = True
                    self.matching = False
                return True
            else:
                return False
    def default(self):
        return not self.matched and not self.matching

Met deze klasse is een syntaxis als deze mogelijk:

dia = 4
with switch(dia) as s:
    if s.case(1, True): print('lunes')
    if s.case(2, True): print('martes')
    if s.case(3, True): print('miércoles')
    if s.case(4, True): print('jueves')
    if s.case(5, True): print('viernes')
    if s.case(6, True): print('sábado')
    if s.case(7, True): print('domingo')
    if s.default(): print('error')

Voordelen van deze oplossing? De syntaxis is voor mensen die uit andere talen komen heel herkenbaar en er zijn geavanceerde aanpassingen mogelijk, zoals het gebruiken van een willekeurige vergelijkingsfunctie, het groeperen van cases, het uitvoeren van meerdere branches of slechts één, etc. Het nadeel is dat het doorgaans langzamer is en dat de speciale klasse moet worden geïmporteerd of gedefinieerd.

Het gebruik van lambda-functies om acties op woordenboeken te vereenvoudigen

Vaak hoeft u geen aparte functies voor elke actie te definiëren; u kunt anonieme functies (lambda's) gebruiken. Dit is vooral praktisch wanneer de uit te voeren handeling eenvoudig is:

switch_operaciones = {
    'sumar': lambda a, b: a + b,
    'restar': lambda a, b: a - b,
    'multiplicar': lambda a, b: a * b
}
operacion = 'sumar'
resultado = switch_operaciones.get(operacion, lambda a, b: None)(5, 3)
print(resultado)

Hierdoor wordt de code compact en eenvoudig uit te breiden zonder dat dit ten koste gaat van de duidelijkheid.

Geavanceerde use cases: patroonherkenning in match-case

Zin luciferdoosje Python 3.10 gaat veel verder dan het kopiëren van de klassieke switch-case. De ware kracht zit in de structurele patroonmatchingU kunt er bijvoorbeeld onderscheid mee maken tussen verschillende datastructuren, aangepaste klassen, objecten ontbinden en subelementen eenvoudig vastleggen.

Voorbeeld met lijsten en tupels:

datos = 
match datos:
    case :
        print('Lista con 1, 2, 3')
    case :
        print('Lista que empieza con 1')
    case _:
        print('Otra lista')

Voorbeeld met objecten (uitgaande van een Point-klasse):

class Punto:
    def __init__(self, x, y):
        self.x = x
        self.y = y
p = Punto(2, 3)
match p:
    case Punto(x=0, y=0):
        print('Origen')
    case Punto(x, y):
        print(f'Coordenadas: {x} {y}')

Met dit mechanisme kunt u zeer expressieve code schrijven die zich aanpast aan complexe structuren zonder dat dit ten koste gaat van de leesbaarheid.

  Wat is PSeInt en hoe kan het je helpen programmeren te leren?

Aspecten waarmee rekening moet worden gehouden bij het migreren van code: compatibiliteit en best practices

Niet alle projecten kunnen het zich veroorloven om luciferdoosjes meteen in te zetten. Als u in omgevingen met oudere versies van Python werkt (bijvoorbeeld 3.8 of 3.9), moet u kiezen voor woordenboeken. Wanneer u kunt upgraden naar 3.10 of hoger, profiteert u van de kracht en helderheid van patroonherkenning, vooral in projecten waar meervoudige selectielogica essentieel is.

Vergeet niet:

  • Kies de optie die de beste leesbaarheid, flexibiliteit en onderhoudsgemak biedt.
  • Bij zeer eenvoudige problemen (enkele gevallen) is if-elif-else doorgaans voldoende en directer.
  • Gebruik woordenboeken en functies voor grote selectietabellen.
  • Voor complexe structuren of om optimaal gebruik te maken van de moderne Python, kiest u match-case.

Een trucje: u kunt bestaande functies converteren, zodat ze actiewoordenboeken accepteren. Hierdoor wordt de overgang tussen de verschillende benaderingen nog eenvoudiger.

Optimalisatie- en ontwerptips voor schonere Python-code

Maak niet de fout om eindeloze reeksen voorwaarden te ontwerpen, alleen maar om de klassieke schakelaar te imiteren. Denk na over elk specifiek geval en beoordeel welke besturingsstructuur de meeste waarde toevoegt aan de context van je programma. Onthoud dat Python waarde hecht aan duidelijkheid, dus vermijd het overcompliceren van je code als je hetzelfde resultaat gemakkelijker kunt bereiken.

Een belangrijke tip: Maak bij het gebruik van woordenboeken gebruik van de functie get() om fouten te voorkomen als de sleutel niet bestaat en zo op een elegante manier een standaardgeval te kunnen definiëren.

Vergelijking met andere talen en afsluitende gedachten

In sommige talen, zoals C, C++ of Java, laten switches alleen het vergelijken van eenvoudige waarden (gehele getallen, strings) toe en bieden ze weinig waarde voor complexe structuren. Python gaat een stap verder: eerst biedt het veelzijdige alternatieven (if-elif-else, woordenboeken) en nu opent het de deur naar geavanceerde logica zonder extra moeite. De sleutel is om te profiteren van de voordelen van elke versie en jezelf niet te dwingen om andere syntaxis te imiteren als het probleem een ​​andere oplossing vereist.

Als je net begint met Python of andere talen gebruikt, raak dan niet gefrustreerd als je het sleutelwoord 'switch' niet in de handleiding kunt vinden. Denk na over alle beschikbare mogelijkheden en kies de optie die het beste bij je context en behoeften past.

Het beheren van meerdere alternatieven in Python was nog nooit zo eenvoudig en krachtig. Nu begrijpt u de redenen achter de afwezigheid (en latere komst) van de switch, hoe u deze effectief kunt simuleren in elke versie en hoe u de nieuwe match-case-instructie optimaal kunt benutten. Of u nu moet kiezen uit een half dozijn opties, complexe structuren moet manipuleren, best practices moet volgen of zich zorgen moet maken over de prestaties, u beschikt over robuuste, elegante en flexibele alternatieven. Of uw code nu bedoeld is voor snelle scripts of complexe applicaties, Python biedt u de tools om deze duidelijk, snel en eenvoudig te schrijven.

imperatieve programmering-0
Gerelateerd artikel:
Imperatief programmeren: wat het is, voordelen, verschillen en praktische voorbeelden