Outils personnels
Vous êtes ici : Accueil Python Bonnes pratiques et astuces Python Expressions conditionnelles

Expressions conditionnelles

Par David Goodger - Dernière modification 17/05/2008 11:23
Contributeurs : David Larlet
CC BY-SA

Tester des valeurs vraies

Il est élégant et rapide de tirer partie des avantages de Python en ce qui concerne les valeurs booléennes :

# faites ça :     # et pas ça :
if x:             if x == True:
    pass              pass

Test d'une liste :

# faites ça :     # et pas ça :
if items:         if len(items) != 0:
    pass              pass

                  # et surtout pas ça :
                  if items != []:
                      pass

Valeurs vraies

Les noms True et False sont des instances intrinsèques à Python de type bool, des valeurs booléennes. Comme None, il n'existe qu'une seule instance de chaque.

False True
False (== 0) True (== 1)
"" (empty string) toutes les chaînes à part "" (" ", "nimportequoi")
0, 0.0 n'importe quel chiffre à part 0 (1, 0.1, -1, 3.14)
[], (), {}, set() n'importe quel container non vide ([0], (None,), [''])
None pratiquement tous les objets qui ne sont explicitement équivalents à False

Voici par exemple un objet qui est toujours vrai :

>>> class C:
...  pass
...
>>> o = C()
>>> bool(o)
True
>>> bool(C)
True

Pour contrôler la valeur booléenne d'une instance ou d'une classe définie, utilisez les méthodes spéciales __nonzero__ ou __len__. Utilisez __len__ si votre classe est un container qui a une taille :

class MyContainer(object):

    def __init__(self, data):
        self.data = data

    def __len__(self):
        """Return my length."""
        return len(self.data)

Si votre classe n'est pas un container, utilisez __nonzero__ :

class MyClass(object):

    def __init__(self, value):
        self.value = value

    def __nonzero__(self):
        """Return my truth value (True or False)."""
        # This could be arbitrarily complex:
        return bool(self.value)

En Python 3.0, __nonzero__ a été renommé __bool__ afin d'être consistant avec le type bool natif. Pour être compatible, ajoutez ceci à la définition de votre classe :

__bool__ = __nonzero__
Actions sur le document