Accéder au contenu principal

Python Switch Case Statement : Guide du débutant

Découvrez le match-case de Python : un guide sur sa syntaxe, ses applications en data science, ML, et une analyse comparative avec le switch-case traditionnel.
Actualisé 15 janv. 2025  · 7 min de lecture

Explorez l'instruction match-case de Python, introduite dans Python 3.10, et apprenez comment le filtrage structurel apporte un nouveau niveau d'élégance et de puissance à la programmation Python. Nous nous pencherons sur sa syntaxe, ses applications en science des données et en apprentissage automatique, et même sur sa comparaison avec les instructions switch-case traditionnelles dans d'autres langages. Si vous ne connaissez pas encore Python, n'hésitez pas à consulter notre Aide-mémoire Python pour les débutants

Comprendre les déclarations de cas de commutation traditionnels

Avant Python 3.10, les développeurs Python devaient utiliser plusieurs instructions if-elif-else ou des dictionnaires pour simuler la fonctionnalité de cas de commutation. Voici un exemple de base utilisant le principe if-elif-else:

day = input("Enter the day of the week: ").capitalize()

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.

Introduction de Match et Case dans Python 3.10

Avec l'introduction de match-case, Python offre désormais une fonctionnalité ancrée dans la correspondance des motifs structurels, vous permettant d'écrire une logique conditionnelle plus propre et plus puissante.

Qu'est-ce que la correspondance des modèles structurels ?

La correspondance des motifs structurels, introduite dans le PEP 634, est un moyen de faire correspondre et de déstructurer les structures de données en fonction de leur forme et de leur contenu. Elle est plus souple que la correspondance de valeurs traditionnelle, permettant aux développeurs de travailler avec des séquences, des mappings et même des instances de classes personnalisées.

La syntaxe de base du Match-Case

Voici un exemple simple de match-case en action. Classons les jours de la semaine en deux catégories : les week-ends et les jours de la semaine :

# Take user input for the day of the week
day = input("Enter the day of the week: ").capitalize()

# 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.

Concepts clés de l'exemple :

  1. capitalize() Méthode: Veille à ce que les données saisies par l'utilisateur respectent le format attendu (par exemple, "lundi" au lieu de "monday").
  2. Correspondance de motifs avec case:
    • case "Saturday" | "Sunday": Correspond à l'un des motifs énumérés. Le symbole | agit comme un opérateur OR.
    • case _: Un cas fourre-tout (par défaut) pour traiter les entrées non valides.
  3. Pas besoin de break : Contrairement aux cas de commutation traditionnels, Python quitte le bloc match après la première correspondance réussie.

Comparaison entre match-case et if-elif-else

Le tableau ci-dessous vous permet de comparer les deux techniques : 

Fonctionnalité if-elif-else match-case
Introduit en Disponible depuis les premières versions de Python Introduit dans Python 3.10
Syntax Utilise les mots-clés if, elif et else Utilise les mots clés "match" et "case".
Lisibilité Peut devenir verbeux avec de nombreuses conditions Plus concis et plus lisible pour les modèles complexes
Cas par défaut Utilise autre chose pour un scénario par défaut Utilise _ comme joker pour le cas par défaut
Correspondance de motifs Limité à de simples contrôles d'état Prise en charge de la recherche de motifs complexes (par exemple, les séquences)
Performance Généralement efficace pour des conditions simples Potentiellement plus performant avec des modèles complexes
Champ d'application Chaque bloc nécessite une portée explicite avec indentation Les champs d'application sont naturellement définis dans les blocs de cas
Cas d'utilisation Convient aux tâches décisionnelles simples Idéal pour la déconstruction de structures de données complexes
Flexibilité Limité aux comparaisons scalaires Peut correspondre à des types et structures de données complexes
Pause automatique Nécessite une interruption explicite dans certaines langues Quitte automatiquement l'application après qu'un cas a été traité.

Cas d'utilisation avancés de Match et Case en Python

Applications de la science des données

L'instruction match-case de Python peut être très utile dans les tâches de prétraitement des données en science des données. Le prétraitement consiste souvent à classer les données en différents groupes sur la base de critères spécifiques.

Par exemple, dans un ensemble de données d'animaux, vous pourriez vouloir les classer en fonction de leur classe (mammifères, oiseaux, reptiles, etc.). Voici un exemple simplifié :

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

Cette approche simplifie la logique if-else complexe et rend le code plus lisible et plus facile à maintenir, en particulier lorsqu'il s'agit de grands ensembles de données comportant plusieurs catégories.

Développement web

Dans les frameworks web tels que Django ou Flask, vous pouvez utiliser match-case pour acheminer les requêtes HTTP ou gérer des codes d'erreur spécifiques. Apprenez-en plus sur Python pour les développeurs avec notre cours en ligne. 

Exemple: Routage des méthodes HTTP

# 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.")

Explication:

  • La variable method représente le type de requête HTTP.
  • Chaque case correspond à une méthode HTTP possible, ce qui simplifie les multiples déclarations if-elif.

Gestion de l'API

Lors du traitement des réponses de l'API, match-case peut être utilisé pour gérer différents codes d'état ou catégoriser les réponses JSON.

Exemple: Traitement des codes d'état

# 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.")

Cette approche facilite l'interprétation et la réponse aux résultats de l'API.

Correspondance simple ou complexe

Le site match-case de Python n'est pas limité à la recherche de valeurs constantes ; il peut traiter des motifs plus complexes. Voici une distinction :

Correspondance simple des constantes

Les correspondances simples, comme les chaînes de caractères ou les nombres entiers, sont idéales pour une logique claire et lisible, comme le montrent les exemples ci-dessus.

Correspondance de motifs complexes

Lorsque vous travaillez avec des données structurées (par exemple, des dictionnaires, des séquences), match-case peut extraire et manipuler des données de manière efficace.

Exemple: Structures de données correspondantes

# 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.")

Explication:

  • Le premier case extrait name et version du dictionnaire, ce qui facilite le travail avec des données structurées.
  • Cela montre la véritable puissance de la recherche de motifs structurels de Python, qui va bien au-delà de ce que les implémentations traditionnelles de cas de commutation peuvent réaliser.

Cas de commutation Python : pièges courants et meilleures pratiques

Conseils de débogage

Une erreur fréquente lors de l'utilisation de la correspondance des cas en Python est d'oublier d'inclure le trait de soulignement (_) pour le cas par défaut, un peu comme le "else" dans les instructions if-else traditionnelles. Cela peut conduire à des comportements inattendus si aucun des cas spécifiques ne correspond. Prévoyez toujours un cas par défaut pour traiter les valeurs inattendues ou diverses.

Considérations sur les performances

Bien que l'instruction match-case soit un outil puissant, son impact sur les performances du code Python, en particulier dans les applications à grande échelle, doit être pris en compte. Dans les scénarios comportant un grand nombre de cas ou une recherche complexe de motifs, les performances peuvent être affectées. Il est essentiel de profiler et de tester les performances de votre code dans des scénarios réels afin de comprendre et d'atténuer tout problème de performance potentiel.

Boîtier d'allumette Python et boîtier d'aiguillage traditionnel

Analyse comparative

Le cas de correspondance de Python diffère considérablement des déclarations traditionnelles de cas de commutation que l'on trouve dans des langages tels que Java ou C++. En Java, par exemple, l'instruction switch est limitée à la recherche de valeurs scalaires (comme les entiers et les types enum), alors que la fonction match-case de Python offre une capacité de recherche de motifs beaucoup plus souple, permettant de rechercher des types de données complexes, comme les séquences et les instances de classe. Cela rend l'implémentation de Python plus puissante, mais nécessite également une compréhension plus approfondie des concepts de filtrage.

Guide de transition

Pour les programmeurs familiarisés avec les instructions switch-case traditionnelles dans des langages tels que C++ ou Java, la transition vers le match-case de Python nécessite un changement de mentalité, passant de la simple correspondance de valeurs à la correspondance de motifs.

Il est important de comprendre que le match-case de Python est plus qu'un simple switch-case ; c'est un outil polyvalent qui permet de déconstruire les types de données et d'extraire des informations de structures complexes. Pour maîtriser son utilisation, il est essentiel de s'entraîner avec différents types de données et de modèles.

Conclusion

L'introduction par Python des instructions match et case dans la version 3.10 offre une fonctionnalité très attendue par les développeurs familiarisés avec les instructions switch case dans d'autres langages. Il offre un moyen propre et concis de traiter des conditions multiples, améliorant ainsi la lisibilité et la maintenabilité du code.

Vous pouvez en savoir plus sur les fonctions Python dans notre tutoriel complet et explorer ce concept, ainsi que d'autres, dans notre cours Python intermédiaire.


Matt Crabtree's photo
Author
Matt Crabtree
LinkedIn

Rédacteur et éditeur de contenu dans le domaine des technologies de l'information et de la communication. Vous êtes déterminé à explorer les tendances en matière de données et enthousiaste à l'idée d'apprendre la science des données.

FAQ sur l'étui de l'interrupteur Python

Que se passe-t-il si deux cas correspondent à la même entrée dans une instruction "match-case" ?

Python évalue les cas dans l'ordre où ils apparaissent. Le premier cas correspondant est exécuté et le bloc de correspondance est immédiatement supprimé.

La méthode match-case peut-elle être utilisée avec des classes ou des objets personnalisés ?

Oui, match-case peut fonctionner avec des classes personnalisées. Vous pouvez définir des modèles pour faire correspondre les attributs ou même utiliser des gardes pour appliquer une logique supplémentaire.

La méthode match-case est-elle plus rapide que la méthode if-elif-else ?

La différence de performance dépend de la complexité des conditions. Pour les contrôles de valeur simples, les deux systèmes fonctionnent de manière similaire. Cependant, match-case peut être plus efficace et plus lisible pour la recherche de motifs complexes.

Qu'est-ce qu'une garde dans une instruction match-case ?

Une garde est une condition spécifiée après case qui précise davantage quand un cas doit correspondre. Par exemple :

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

Pouvez-vous utiliser match-case avec des versions de Python antérieures à 3.10 ?

Non, match-case n'est disponible qu'à partir de la version 3.10 de Python. Pour les versions antérieures, vous pouvez utiliser if-elif-else ou le mappage de dictionnaire pour obtenir une fonctionnalité similaire.

Sujets

Apprenez Python dès aujourd'hui

cours

Intermediate Python

4 hr
1.2M
Level up your data science skills by creating visualizations using Matplotlib and manipulating DataFrames with pandas.
Afficher les détailsRight Arrow
Commencer le cours
Voir plusRight Arrow
Apparenté

blog

Les 32 meilleures questions d'entretien sur AWS et leurs réponses pour 2024

Un guide complet pour explorer les questions d'entretien AWS de base, intermédiaires et avancées, ainsi que des questions basées sur des situations réelles. Il couvre tous les domaines, garantissant ainsi une stratégie de préparation bien équilibrée.
Zoumana Keita 's photo

Zoumana Keita

30 min

blog

2022-2023 Rapport annuel DataCamp Classrooms

À l'aube de la nouvelle année scolaire, DataCamp Classrooms est plus motivé que jamais pour démocratiser l'apprentissage des données, avec plus de 7 650 nouveaux Classrooms ajoutés au cours des 12 derniers mois.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

8 min

blog

Q2 2023 DataCamp Donates Digest

DataCamp Donates a offert plus de 20k bourses d'études à nos partenaires à but non lucratif au deuxième trimestre 2023. Découvrez comment des apprenants défavorisés et assidus ont transformé ces opportunités en réussites professionnelles qui ont changé leur vie.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

blog

Les 20 meilleures questions d'entretien pour les flocons de neige, à tous les niveaux

Vous êtes actuellement à la recherche d'un emploi qui utilise Snowflake ? Préparez-vous à répondre à ces 20 questions d'entretien sur le flocon de neige pour décrocher le poste !
Nisha Arya Ahmed's photo

Nisha Arya Ahmed

20 min

blog

Célébration de Saghar Hazinyar : Une boursière de DataCamp Donates et une diplômée de Code to Inspire

Découvrez le parcours inspirant de Saghar Hazinyar, diplômée de Code to Inspire, qui a surmonté les défis en Afghanistan et s'est épanouie grâce à une bourse de DataCamp Donates.
Fereshteh Forough's photo

Fereshteh Forough

4 min

blog

Nous avons fait don de bourses DataCamp Premium à un million de personnes, et ce n'est pas fini.

Réparties entre nos deux programmes d'impact social, DataCamp Classrooms et #DCDonates, les bourses offrent un accès illimité à tout ce que DataCamp Premium a à offrir.
Nathaniel Taylor-Leach's photo

Nathaniel Taylor-Leach

Voir plusVoir plus