Dans Python 3.10, le mécanisme de correspondance de modèle structural (structural pattern matching) a été introduit avec l'opérateur match-case. Historiquement, dans Python, des conditions complexes étaient mises en œuvre à l'aide de chaînes if/elif/else, ce qui était peu pratique pour analyser des structures imbriquées (par exemple, des dictionnaires, des tuples imbriqués).
Problème — les vérifications imbriquées complexes deviennent peu lisibles et difficiles à maintenir. L'approche basée sur match-case permet de décrire de manière concise les vérifications avec le déballage de variables et des conditions de garde.
Solution — utiliser la syntaxe match-case, qui permet de faire correspondre la structure de l'objet (dictionnaires, tuples, listes) avec un modèle donné et d'extraire des données.
Exemple de code :
point = (1, 2) match point: case (0, 0): print('Origine') case (0, y): print(f'Y={y}') case (x, 0): print(f'X={x}') case (x, y): print(f'X={x}, Y={y}')
Caractéristiques clés :
Peut-on utiliser match-case pour des conditions if-elif-else simples avec des valeurs séparées ?
Oui, cependant la force de match-case réside dans sa structuration. Pour des conditions discrètes simples, il est similaire au switch-case des langages comme C.
Peut-on utiliser match-case avec des objets immuables (par exemple, str) ?
Oui, match-case fonctionne avec tous les objets qui peuvent être comparés à un modèle, y compris les chaînes et les nombres.
Exemple de code :
color = 'red' match color: case 'red': print('Ceci est rouge') case 'blue': print('Ceci est bleu') case _: print('Couleur inconnue')
Quelle erreur se produit lors de la correspondance d'objets avec des noms de variables identiques dans la portée extérieure ?
La correspondance de modèle assigne les variables localement à l'intérieur de case, indépendamment du contexte extérieur. Cela peut entraîner de la confusion si le nom de la variable est déjà utilisé à l'extérieur.
Utiliser match-case pour un grand if-elif-else avec des constantes simples.
Avantages :
Inconvénients :
Traitement d'un flux de structures JSON imbriquées provenant d'une API, où différents cas nécessitent différentes extractions de données à partir de différents niveaux de structure.
Avantages :
Inconvénients :