Une utilisation étonnante du mot-clé « or » en python

Aujourd’hui, on écrit du code compact. Savez-vous qu’il est possible d’utiliser le mot clé python or pour une affectation de valeur conditionnelle simple et élégante?

Lorsque l’on souhaite affecter conditionnellement des valeurs, on aura tendance à utiliser des structures if. Ici on va s’intéresser au cas où la valeur reçue est None, qu’on souhaite dans ce cas remplacer par une valeur par défaut autre.

val = get_some_value()
if val is None:
   val = 'default'
some_function(val)

Mais cela pourrait s’écrire bien plus simplement de la façon suivante:

val = get_some_value()
some_function(val or 'default')

Par quel miracle? Simplement, lorsqu’on utilise l’opération booléene or, python évalue la fonction __nonzero__ (ou bien __bool__ en Python 3) de l’object « de gauche ». Si cette évaluation retourne False, l’objet de « droite » est choisi.

Il se trouve que None, "", 0, [] ou encore {} par exemple sont tous évalués à False.

Pour complément, lorsque qu’un objet est précédé de if, son évaluation booléenne est aussi exécutée.
Cela permet entre autres d’écrire:

my_list = get_list()
if my_list:
    # ... do things

au lieu de:

my_list = get_list()
if my_list is not None and len(my_list) > 0:
    # ...

Élégant, non? Il m’arrive souvent d’implémenter cette fonction __nonzero__ dans mes classes, lorsque ça a du sens. Par exemple, une classe représentant un fichier pourrait être équivalent à True si le fichier existe.

Vous aimerez aussi...

Laisser un commentaire