Réjouir! Finies les longues chaînes de ifelse déclarations, parce que switch les déclarations seront bientôt là – en quelque sorte. Ce que les dieux Python nous donnent réellement match déclarations. match les déclarations sont terriblement similaires à switch déclarations, mais ont quelques fonctionnalités vraiment cool et uniques, que je vais essayer d’illustrer ci-dessous.

Tourne le bouton

UNE switch instruction est souvent utilisée à la place d’un ifelse échelle. Voici un exemple rapide de la même logique en C, d’abord exécutée avec un if déclaration, puis avec un switch déclaration:

Essentiellement, un switch L’instruction prend une variable et la teste pour l’égalité par rapport à un certain nombre de cas différents. Si aucun des cas ne correspond, alors le default case est invoquée. Remarquez dans l’exemple que chacun case se termine par un break. Cela protège contre plus d’une correspondance de cas (ou permet la mise en cascade), car les cas sont vérifiés dans l’ordre dans lequel ils sont répertoriés. Une fois le dossier terminé, break est appelé et le switch l’instruction se termine.

Un match fait au paradis

Vous pouvez penser à match déclarations comme «Switch 2.0». Avant d’entrer dans le vif du sujet ici, si tout ce que tu veux c’est switch en Python, vous avez de la chance, car ils peuvent être utilisés de la même manière. Voici un exemple similaire à ce que nous avons examiné plus tôt, cette fois en utilisant match en Python.

Il y a quelques différences à noter dès le départ. Premièrement, il n’y a pas break déclarations. Les développeurs étaient préoccupés par la confusion si un break instruction ont été appelés à l’intérieur d’un match déclaration à l’intérieur d’une boucle – qu’est-ce qui casse alors, la boucle ou la correspondance? Ici, le premier cas satisfait est exécuté et l’instruction est renvoyée. Vous remarquerez également que plutôt que default, on a case _, qui se comporte de la même manière.

Le pouvoir de la correspondance de motifs

Donc, nous avons un switch déclaration avec une syntaxe légèrement différente, non? Pas assez. Le nom match a été utilisé pour une raison – ce qui se passe réellement ici est quelque chose appelé Pattern Matching. Pour illustrer ce que c’est, regardons un exemple plus passionnant, tout droit sorti de la proposition de fonctionnalité pour ajouter le mot-clé en question à Python:

Wow! Nous avons juste pris un objet, vérifié son type, vérifié sa forme et instancié un nouvel objet sans aucune indexation, ni même un len() appel. Cela fonctionne également sur n’importe quel type, contrairement au classique switch qui ne fonctionne que sur des valeurs intégrales. Au cas où ce ne serait pas assez cool pour vous, les motifs peuvent être combinés. Encore une fois, à partir de la proposition de fonctionnalité:

D’accord, d’accord – un autre exemple. C’est là que le match déclaration devient vraiment puissante. Les modèles eux-mêmes peuvent inclure des comparaisons, appelées gardes. Cela vous permet de filtrer les valeurs dans chaque case déclaration:

Vendu! Quand puis-je essayer?

Nous mettrons la main sur cette nouvelle commande magique en Python 3.10, prévue pour une sortie complète le 4 octobre 2021. Pour les aventuriers, une version alpha (Python 3.10.0a6) est disponible en téléchargement aujourd’hui. Il peut être utile de passer un peu de temps à se familiariser avec la correspondance de modèles, comme comprendre la différence entre les valeurs littérales correspondantes et les variables correspondantes.

Alors pourquoi toutes les langues n’ont-elles pas match déclarations? Ils sont clairement meilleurs que switch déclarations!
C’est du moins ce que j’ai dit, et ma petite amie Sara n’a pas tardé à hausser les sourcils et à expliquer qu’il y avait une énorme surcharge de performance impliquée. le switch l’instruction en C est relativement simple. Il compare les entiers les uns aux autres, exécutant n opérations à temps constant. Toute la puissance et la commodité qui accompagnent le match signifie que beaucoup de choses se passent en arrière-plan, ce qui ralentit l’exécution du code – un compromis incroyablement pythonique à faire.

Je trouve que l’efficacité a un petit prix à payer pour une telle fonctionnalité étendue, mais en tant qu’ingénieur en mécanique, mes langages préférés sont Matlab et Python, vous devriez donc probablement prendre mon avis ici avec un grain de sel.