2009-09-21 8 views

Répondre

18

Tout objet peut être testé pour la valeur de vérité , pour une utilisation dans un cas ou en état ou opérande des opérations booléennes ci-dessous. Les valeurs suivantes sont considérés comme faux:

  • Aucun

  • Faux

  • zéro de tout type numérique, par exemple, 0, 0L, 0.0, 0j.

  • toute séquence vide, par exemple, '', (), [].

  • tout mappage vide, par exemple, {}.

  • des instances de classes définies par l'utilisateur, si la classe définit une méthode __nonzero__() ou __len__(), lorsque cette méthode renvoie le nombre entier zéro ou une valeur bool False.

Toutes les autres valeurs sont considérés comme de véritables - donc des objets de plusieurs types sont toujours vraies. Les opérations et les fonctions intégrées qui ont un résultat booléen renvoient toujours 0 ou False pour false et 1 ou True pour true, sauf indication contraire. (Exception importante: les opérations booléennes "ou" et "et" retournent toujours un de leurs opérandes.)

https://docs.python.org/2/library/stdtypes.html#truth-value-testing

Et comme mentionné, vous pouvez remplacer avec des objets personnalisés en modifiant non nulle.

+5

Il suffit de noter que dans Python 3.0, '__bool__' doit être remplacé à la place – Casebash

+7

Les documents que vous citez sont imprécis (ou incomplets); Par exemple, les ensembles ne sont ni des séquences ni des mappages, mais lorsqu'ils sont vides, ils sont également faux. Je réduirais ces deux lignes (couvrant également le cas des ensembles) à "n'importe quel ** conteneur ** vide". –

8

Mise à jour: Suppression de tous les infomation en double avec le poste

de Meder Pour les objets personnalisés en Python < 3,0 __nonzero__ pour changer la façon dont il est évalué éd. En Python 3.0 c'est __bool__ (Reference par e-satis)

Il est important de comprendre ce que l'on entend par évaluer. L'une des significations est quand un objet est explicitement converti en booléen ou implicitement jeté par son emplacement (dans une boucle if ou while).

Une autre est == evalutation. 1 == Vrai, 0 == Faux, rien d'autre n'est égal via ==.

>>> None==False 
False 
>>> 1==True 
True 
>>> 0==False 
True 
>>> 2==False 
False 
>>> 2==True 
False 

Enfin, pour is, seuls True ou False sont eux-mêmes.

+0

Les objets personnalisés peuvent renvoyer True/False pour une évaluation booléenne en implémentant __nonzero__ – dcrosta

Questions connexes