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éfautPour 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