12

What truth value do objects evaluate to in Python?

Related Questions

Community
  • 1
  • 1
Casebash
  • 114,675
  • 90
  • 247
  • 350

2 Answers2

24

Any object can be tested for truth value, for use in an if or while condition or as operand of the Boolean operations below. The following values are considered false:

  • None

  • False

  • zero of any numeric type, for example, 0, 0L, 0.0, 0j.

  • any empty sequence, for example, '', (), [].

  • any empty mapping, for example, {}.

  • instances of user-defined classes, if the class defines a __nonzero__() or __len__() method, when that method returns the integer zero or bool value False.

All other values are considered true -- so objects of many types are always true. Operations and built-in functions that have a Boolean result always return 0 or False for false and 1 or True for true, unless otherwise stated. (Important exception: the Boolean operations "or" and "and" always return one of their operands.)

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

And as mentioned, you can override with custom objects by modifying nonzero.

twasbrillig
  • 17,084
  • 9
  • 43
  • 67
meder omuraliev
  • 183,342
  • 71
  • 393
  • 434
  • 6
    Just need to note that in Python 3.0 `__bool__` needs to be overridden instead – Casebash Sep 21 '09 at 01:27
  • 8
    The docs you quote are imprecise (or incomplete); for example, sets are neither sequences nor mappings, yet, when empty, they're also false. I would collapse those two lines (also covering the case of sets) to "any empty **container**". – Alex Martelli Sep 21 '09 at 01:48
9

Update: Removed all duplicate infomation with Meder's post

For custom objects in Python < 3.0 __nonzero__ to change how it is evaluated. In Python 3.0 this is __bool__ (Reference by e-satis)

It is important to understand what is meant by evaluate. One meaning is when an object is explicitly casting to a bool or implicitly cast by its location (in a if or while loop).

Another is == evalutation. 1==True, 0==False, nothing else is equal via ==.

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

Finally, for is, only True or False are themselves.

Community
  • 1
  • 1
Casebash
  • 114,675
  • 90
  • 247
  • 350