Réjouir! Finies les longues chaînes de if
…else
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 if
…else
é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.