Ga naar hoofdinhoud

Python switch-case-instructie: een beginnersgids

Ontdek Python's match-case: een gids voor de syntax, toepassingen in data science en ML, en een vergelijking met de traditionele switch-case.
Bijgewerkt 2 jun 2026  · 5 min lezen

Ontdek Python's match-case-instructie, geïntroduceerd in Python 3.10, en leer hoe structurele patroonmatching een nieuw niveau van elegantie en kracht toevoegt aan Python-programmeren. We duiken in de syntax, toepassingen in data science en machine learning, en zelfs hoe het zich verhoudt tot traditionele switch-case-instructies in andere talen. Ben je nieuw met Python? Bekijk dan zeker onze Python Cheat Sheet voor beginners

Traditionele switch-case-instructies begrijpen

Voor Python 3.10 moesten Python-ontwikkelaars meerdere if-elif-else-instructies of dictionaries gebruiken om switch-case-functionaliteit te simuleren. Hier is een eenvoudig voorbeeld met if-elif-else:

day = "Saturday"

if day == "Saturday" or day == "Sunday":
    print(f"{day} is a weekend.")
elif day in ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]:
    print(f"{day} is a weekday.")
else:
    print("That's not a valid day of the week.")

# Saturday is a weekend.

Match en case in Python 3.10 introduceren

Met de introductie van match-case biedt Python nu een functie die is gebaseerd op structurele patroonmatching, waarmee je schonere en krachtigere conditionele logica kunt schrijven.

Wat is structurele patroonmatching?

Structurele patroonmatching, geïntroduceerd in PEP 634, is een manier om datastructuren te matchen en te deconstrueren op basis van hun vorm en inhoud. Het is flexibeler dan traditionele waardematching en stelt ontwikkelaars in staat te werken met reeksen, mappings en zelfs instanties van eigen klassen.

De basis-syntax van match-case

Hier is een eenvoudig voorbeeld van match-case in actie. Laten we weekdagen indelen in weekend of doordeweeks:

day = "Monday"

# Match the day to predefined patterns
match day:
    case "Saturday" | "Sunday":
        print(f"{day} is a weekend.")  # Match weekends
    case "Monday" | "Tuesday" | "Wednesday" | "Thursday" | "Friday":
        print(f"{day} is a weekday.")  # Match weekdays
    case _:
        print("That's not a valid day of the week.")  # Default case

# Monday is a weekday.

Belangrijke concepten in het voorbeeld:

  1. Patroonmatching met case:

    • case "Saturday" | "Sunday": Matcht elk van de opgesomde patronen. Het |-symbool werkt als een OF-operator.

    • case _: Een catch-all (standaard) case om ongeldige invoer af te handelen.

  2. Geen break nodig: In tegenstelling tot traditionele switch-case verlaat Python het match-blok na de eerste succesvolle match.

Vergelijking van match-case vs if-elif-else

In de onderstaande tabel zie je hoe de twee technieken zich verhouden: 

Functie if-elif-else match-case
Geïntroduceerd in Beschikbaar sinds vroege Python-versies Geïntroduceerd in Python 3.10
Syntax Gebruikt de sleutelwoorden if, elif en else Gebruikt de sleutelwoorden match en case
Leesbaarheid Kan omslachtig worden bij veel voorwaarden Compacter en leesbaarder bij complexe patronen
Standaardgeval Gebruikt else voor een standaardscenario Gebruikt _ als wildcard voor het standaardgeval
Patroonmatching Beperkt tot eenvoudige voorwaardelijke controles Ondersteunt complexe patroonmatching (bijv. reeksen)
Prestaties Over het algemeen efficiënt voor eenvoudige voorwaarden Potentieel sneller bij complexe patronen
Scope Elk blok vereist expliciete scope met inspringing Scopes worden vanzelf gedefinieerd onder case-blokken
Use cases Geschikt voor eenvoudige beslissingslogica Ideaal voor deconstructie van complexe datastructuren
Flexibiliteit Beperkt tot vergelijkingen van scalars Kan complexe datatypes en -structuren matchen
Automatische break Vereist expliciete break in sommige talen Stopt automatisch na een gematchte case

Geavanceerde use cases van match en case in Python

Data-science-toepassingen

Python's match-case-instructie kan erg handig zijn bij datapreprocessing in data science. Preprocessing houdt vaak in dat je data in verschillende groepen indeelt op basis van specifieke criteria.

In een dataset met dieren wil je ze bijvoorbeeld indelen op klasse zoals zoogdieren, vogels, reptielen, enz. Hier is een vereenvoudigd voorbeeld:

animal = "Eagle"
match animal:
    case "Eagle" | "Parrot":
        print("Bird")
    case "Lion" | "Tiger":
        print("Mammal")
    case "Python" | "Crocodile":
        print("Reptile")
    case _:
        print("Unknown Class")

# Bird

Deze aanpak vereenvoudigt complexe if-else-logica en maakt de code leesbaarder en onderhoudbaarder, vooral bij grote datasets met meerdere categorieën.

Webdevelopment

In webframeworks zoals Django of Flask kun je match-case gebruiken om HTTP-verzoeken te routeren of specifieke foutcodes af te handelen. Leer meer over Python voor ontwikkelaars met onze online cursus. 

Voorbeeld: HTTP-methoden routeren

# Example: Handling HTTP methods in a Flask-like application
method = "POST"

match method:
    case "GET":
        print("Fetching resource...")
    case "POST":
        print("Creating resource...")
    case "PUT":
        print("Updating resource...")
    case "DELETE":
        print("Deleting resource...")
    case _:
        print("Unsupported HTTP method.")

# Creating resource...

Uitleg:

  • De variabele method vertegenwoordigt het type HTTP-verzoek.
  • Elke case komt overeen met een mogelijke HTTP-methode en vereenvoudigt wat anders meerdere if-elif-instructies zouden zijn.

API-afhandeling

Bij het verwerken van API-responsen kun je match-case gebruiken om verschillende statuscodes af te handelen of JSON-responsen te categoriseren.

Voorbeeld: Statuscodes afhandelen

# Example: API response status code handling
status_code = 200

match status_code:
    case 200:
        print("Request succeeded.")
    case 404:
        print("Resource not found.")
    case 500:
        print("Server error. Please try again later.")
    case _:
        print("Unknown status code.")

# Request succeeded.

Deze aanpak maakt het makkelijker om API-uitkomsten te interpreteren en erop te reageren.

Eenvoudige vs. complexe patroonmatching

Python’s match-case is niet beperkt tot matching op constante waarden; het kan ook complexere patronen aan.

Eenvoudige constante matching

Eenvoudige matches zoals strings of gehele getallen zijn ideaal voor schone, leesbare logica, zoals in de voorbeelden hierboven.

Complexe patroonmatching

Bij gestructureerde data (bijv. dictionaries, reeksen) kan match-case efficiënt data extraheren en bewerken.

Voorbeeld: Datastructuren matchen

# Example: Categorizing configurations
config = {"type": "database", "name": "PostgreSQL", "version": 13}

match config:
    case {"type": "database", "name": name, "version": version}:
        print(f"Database: {name} (Version {version})")
    case {"type": "cache", "name": name}:
        print(f"Cache system: {name}")
    case _:
        print("Unknown configuration.")

# Database: PostgreSQL (Version 13)

Uitleg:

  • De eerste case extraheert name en version uit de dictionary, waardoor werken met gestructureerde data makkelijker wordt.

  • Dit toont de echte kracht van Python’s structurele patroonmatching, ver voorbij wat traditionele switch-case-implementaties kunnen.

Hier is het ingekorte gedeelte met alleen de relevante aanvullingen:

Verder dan basis switch-case

Naast eenvoudige waardematching bevat Python's match-case een paar functies die het onderscheiden van traditionele switch-case-instructies in andere talen.

Guard-clauses

Een guard is een if-voorwaarde die is gekoppeld aan een case en ook waar moet zijn om te matchen. Hiermee combineer je patroonmatching met extra logica — iets wat traditionele switch-instructies niet kunnen:

match point:
    case (x, y) if x == y:
        print(f"Point is on the diagonal at {x}")
    case (x, y) if x > 0 and y > 0:
        print(f"Point {point} is in the first quadrant")
    case (x, y):
        print(f"Point {point} is somewhere else")

# Point (3, 7) is in the first quadrant
 

Guards zijn handig wanneer het patroon alleen niet specifiek genoeg is om tussen cases te onderscheiden.

Voorbij switch-case: destructurerende patronen

Hoewel de voorbeelden hierboven focussen op gebruik in switch-case-stijl, is het goed om te weten dat Python's match-case ook reeksen, dictionaries en klasse-instanties kan deconstrueren — waarbij waarden eruit worden opgepikt als onderdeel van de match. Dit gaat veel verder dan wat switch-instructies in andere talen bieden en is een van de belangrijkste redenen dat structurele patroonmatching aan Python is toegevoegd.

Bijvoorbeeld, een klasse-instantie matchen:

from dataclasses import dataclass

@dataclass
class Point:
    x: int
    y: int

point = Point(0, 5)

match point:
    case Point(x=0, y=0):
        print("Origin")
    case Point(x=0, y=y):
        print(f"On the Y-axis at {y}")
    case Point():
        print("Somewhere else on the plane")

# On the Y-axis at 5

Wil je deze geavanceerdere patronen verder verkennen? Bekijk dan PEP 636, de officiële tutorial over structurele patroonmatching.

Veelvoorkomende valkuilen en best practices voor Python switch-case

Debuggingtips

Een veelgemaakte fout bij het gebruik van match-case in Python is vergeten de underscore (_) op te nemen voor het standaardgeval, vergelijkbaar met 'else' in traditionele if-else-instructies. Dit kan leiden tot onverwacht gedrag als geen van de specifieke cases matcht. Neem altijd een standaardgeval op om onverwachte of overige waarden af te handelen.

Prestatie-overwegingen

Hoewel de match-case-instructie een krachtig hulpmiddel is, moet je rekening houden met de impact op de performance van Python-code, vooral in grootschalige applicaties. In scenario's met veel cases of complexe patroonmatching kan de performance mogelijk beïnvloed worden. Profileren en testen van je code in realistische scenario's is cruciaal om eventuele prestatieproblemen te begrijpen en te beperken.

Python match-case versus traditionele switch-case

Vergelijkende analyse

Python's match-case verschilt aanzienlijk van traditionele switch-case-instructies in talen zoals Java of C++. In Java is de switch-instructie bijvoorbeeld beperkt tot het matchen van alleen scalare waarden (zoals integers en enumtypen), terwijl Python's match-case een veel flexibelere patroonmatching biedt, waarmee je complexe datatypes kunt matchen, zoals reeksen en klasse-instanties. Dit maakt Python's implementatie krachtiger, maar vereist ook een dieper begrip van patroonmatching-concepten.

Transitiehandleiding

Voor programmeurs die vertrouwd zijn met traditionele switch-case-instructies in talen zoals C++ of Java, vraagt de overstap naar Python's match-case om een denkomslag van eenvoudige waardematching naar patroonmatching.

Het is belangrijk te begrijpen dat Python's match-case meer is dan alleen een switch-case; het is een veelzijdig hulpmiddel om datatypes te deconstrueren en informatie uit complexe structuren te halen. Oefenen met verschillende datatypes en patronen is de sleutel tot het onder de knie krijgen ervan.

Conclusie

Python's match- en case-instructies, geïntroduceerd in versie 3.10, zijn uitgegroeid tot een gevestigde functie van modern Python. Sindsdien is structurele patroonmatching uitgegroeid tot een betrouwbaar hulpmiddel dat beschikbaar is in elke actief ondersteunde versie van de taal — inclusief de laatste stabiele release, Python 3.14.4 (april 2026), evenals 3.13 en 3.12.

Je kunt meer lezen over Python-functies in onze volledige tutorial en dit en andere concepten verkennen in onze cursus Intermediate Python.


Matt Crabtree's photo
Author
Matt Crabtree
LinkedIn

Senior redacteur in AI en edtech. Toegewijd aan het verkennen van data- en AI-trends.  

Python switch-case veelgestelde vragen

Wat gebeurt er als twee cases overeenkomen met dezelfde invoer in een match-case-instructie?

Python evalueert cases in de volgorde waarin ze verschijnen. De eerste matchende case wordt uitgevoerd en het match-blok stopt meteen.

Kan match-case worden gebruikt met eigen klassen of objecten?

Ja, match-case werkt met eigen klassen. Je kunt patronen definiëren om attributen te matchen of guards gebruiken om extra logica toe te passen.

Is match-case sneller dan if-elif-else?

Het prestatieverschil hangt af van de complexiteit van de voorwaarden. Voor eenvoudige waardevergelijkingen presteren beide vergelijkbaar. Voor complexe patroonmatching kan match-case echter efficiënter en leesbaarder zijn.

Wat is een guard in een match-case-instructie?

Een guard is een voorwaarde die je na case opgeeft en die verder bepaalt wanneer een case moet matchen. Bijvoorbeeld:

match value:
    case x if x > 10:
        print("Value is greater than 10.")

Kun je match-case gebruiken met Python-versies ouder dan 3.10?

Nee, match-case is alleen beschikbaar in Python 3.10 en later. Voor eerdere versies kun je if-elif-else of dictionary-mapping gebruiken om vergelijkbare functionaliteit te bereiken.

Onderwerpen

Leer vandaag nog Python

Leerpad

Python programmeren

19 Hr
Maak je programmeervaardigheden nog beter. Leer hoe je code kunt optimaliseren, functies en tests kunt schrijven en de beste software-engineeringtechnieken kunt gebruiken.
Bekijk detailsRight Arrow
Begin met de cursus
Meer zienRight Arrow
Gerelateerd

blog

AI vanaf nul leren in 2026: een complete gids van de experts

Ontdek alles wat je moet weten om in 2026 AI te leren, van tips om te beginnen tot handige resources en inzichten van industrie-experts.
Adel Nehme's photo

Adel Nehme

15 min

Meer zienMeer zien