Expressions conditionnelles
Aussi disponible en mode diaporama…
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__

