Conditions if elif else vs. dictionnaire python

Cet article a pour but de présenter une alternative aux conditions if et consorts. Elle consiste à utiliser le type dictionnaire du Python.

Un dictionnaire à la place des if elif else ?

Imaginons qu’on veuille écrire une fonction avec des instructions if, elif et else :

def what(choice):
  if choice == "1":
    return "choix 1"
  elif choice == "2":
    return "choix 2"
  elif choice == "3":
    return "choix 3"
  else:
    return "autre choix"

La fonction what a une complexité O(n) où n est le nombre de conditions possibles.

Il est possible réduire la complexité à O(1) en utilisant un dictionnaire et la méthode get :

choices = {
  "1": "choix 1",
  "2": "choix 2",
  "3": "choix 3"
}

def what(choice):
  return choices.get(choice, "autre choix")

Et avec des fonctions ?

Il est possible de vouloir appeler des fonctions après les conditions plutôt que de renvoyer une valeur.

def what(choice):
  if choice == "1":
    do_1()
  elif choice == "2":
    do_2()
  elif choice == "3":
    do_3()
  else:
    do_other()

Dans ce cas, on stocke directement les fonctions dans le dictionnaire :

choices = {
  "1": do_1,
  "2": do_2,
  "3": do_3,
}

def what(choice):
  return choices.get(choice, do_other)()

Pour aller plus loin

Vous allez me dire que l’intérêt reste limité pour les trois petites conditions des exemples ci-dessus. Par contre, si on a un nombre important d’instructions elif, cette approche améliore la lisibilité, la compacité et l’extensibilité du code.

Par ailleurs, on observe même un gain de performance avec un nombre élevé d’instructions elif (voir cet article en anglais).

N’hésitez pas à laisser un commentaire si vous souhaitez faire une remarque ou poser une question.

Partager :

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *