DEV Community

Discussion on: Python 'is' vs '=='

Collapse
 
codemouse92 profile image
Jason C. McDonald • Edited

Well, no, you wouldn't want to do that. if not a is the accepted shorthand for if a == False, but False and None are distinct values. You should always explicitly test for None, although you can implicitly test for "not None":

if foo:
    # foo has value (not None) OR foo is True

if not foo:
    # foo is False

if foo is None:
    # foo is None
Thread Thread
 
wangonya profile image
Kelvin Wangonya

Awesome.

Thread Thread
 
dbanty profile image
Dylan Anthony

There's actually a bit more to it than that. if not checks "truthyness", not just equality to False. So not foo will evaluate to True if foo is any of these and more:

  1. False
  2. None
  3. 0
  4. []
  5. {}
  6. ""

The same thing applies in the other direction, if [1] will succeed because the list is not empty, empty list are "falsey" whereas lists containing elements are "truthy".

The lesson here is pretty much don't use if without an explicit comparison (== or is) unless you're sure you know how truthy the value will be in all cases.