En Python, jusqu'à la version 3.1, il n'y a pas d'équivalent direct à l'instruction switch-case
que l'on trouve dans d'autres langages comme le C, le C++ ou le Java. Cependant, il existe une solution pour simuler la fonctionnalité switch-case en Python.
Dans les cas où vous n'avez que quelques conditions ou que vous préférez une approche directe, l'utilisation de if-elif-else
est simple et claire :
if case_id == 1:
print("C'est le cas un")
elif case_id == 2:
print("C'est le cas deux")
elif case_id == 3:
print("C'est le cas trois")
else:
print("C'est le cas par defaut")
Depuis Python 3.10, l'instruction match
sert d'équivalent au switch-case, permettant le pattern matching qui est plus versatile et plus puissant.
case_id = 1
match case_id:
case 1:
print("C'est le cas un")
case 2:
print("C'est le cas deux")
case 3:
print("C'est le cas trois")
case _:
print("C'est le cas par défaut")
Une approche courante en Python pour émuler un switch-case est le mappage de dictionnaire, où les clés du dictionnaire agissent comme des cas, et les valeurs sont des fonctions ou des résultats correspondant à chaque cas.
def case_one():
return "TC'est le cas un"
def case_two():
return "C'est le cas deux"
def case_three():
return "C'est le cas trois"
def default_case():
return "C'est le cas par défaut"
switch = {
1: case_one,
2: case_two,
3: case_three
}
def switch_case(case_id):
return switch.get(case_id, default_case)()
# Exemple d'utilisation
print(switch_case(1)) # Sortie: C'est le cas un
print(switch_case(4)) # Sortie: C'est le cas par défaut
Pour une approche plus structurée et réutilisable, en particulier pour les scénarios complexes, l'encapsulation de la fonctionnalité dans une classe est un bon choix de conception :
class Switcher:
def switch(self, case_id):
method_name = 'case_' + str(case_id)
method = getattr(self, method_name, self.default_case)
return method()
def case_1(self):
return "C'est le cas un"
def case_2(self):
return "C'est le cas deux"
def case_3(self):
return "C'est le cas trois"
def default_case(self):
return "C'est le cas par défaut"
# Exemple d'utilisation
switcher = Switcher()
print(switcher.switch(1)) # Sortie: C'est le cas un
print(switcher.switch(4)) # Sortie: C'est le cas par défaut