In Python 3.10 is het mechanisme van structurele patroonmatching (structural pattern matching) geïntroduceerd, de match-case operator. Historisch gezien werden complexe voorwaarden in Python gerealiseerd door middel van een keten van if/elif/else, wat ongemakkelijk was bij het analyseren van geneste structuren (bijvoorbeeld dictionaries, geneste tuples).
Probleem — complexe geneste controles worden moeilijk leesbaar en lastig te onderhouden. De match-case benadering maakt het mogelijk om controles beknopt te beschrijven met het uitpakken van variabelen en guard-voorwaarden.
Oplossing — gebruik de match-case syntaxis die het mogelijk maakt om de structuur van een object (dictionaries, tuples, lijsten) te vergelijken met een opgegeven patroon en gegevens te extraheren.
Voorbeeldcode:
point = (1, 2) match point: case (0, 0): print('Oorsprong') case (0, y): print(f'Y={y}') case (x, 0): print(f'X={x}') case (x, y): print(f'X={x}, Y={y}')
Belangrijkste kenmerken:
Kun je match-case gebruiken voor gewone if-elif-else voorwaarden op afzonderlijke waarden?
Ja, maar de kracht van match-case ligt juist in de structuur. Voor eenvoudige discrete voorwaarden is het vergelijkbaar met switch-case in talen zoals C.
Kun je match-case gebruiken met onveranderlijke objecten (bijvoorbeeld str)?
Ja, match-case werkt met elk object dat kan worden vergeleken met een patroon, inclusief strings en cijfers.
Voorbeeldcode:
color = 'red' match color: case 'red': print('Dit is rood') case 'blue': print('Dit is blauw') case _: print('Onbekende kleur')
Welke fout kan optreden bij het matchen van objecten met dezelfde naam van variabelen in de buitenste scope?
Patroonmatching wijst variabelen lokaal toe binnen case, ongeacht de externe context. Dit kan leiden tot verwarring als de naam van de variabele al extern wordt gebruikt.
Het gebruiken van match-case voor een grote if-elif-else met eenvoudige constanten.
Voordelen:
Nadelen:
Het verwerken van een stroom van geneste JSON-structuren uit een API, waarvoor verschillende cases vereisen dat gegevens op verschillende niveaus van de structuur worden geëxtraheerd.
Voordelen:
Nadelen: