Python: if not val, vs if val is None
Solution 1:
Use a comparison to None if that's what you want. Use "if not value" if you just want to check if the value is considered false (empty list, none, false).
I find "if not value" to be cleaner looking and Pythonic.
Also, be careful with lists. You should not use is when comparing for an empty list. If you know you're getting a list, use if <list>
to check if it has any contents (or len()). Try typing this into the interpreter:
>>> a = []
>>> a is []
False
This is because the temporary list you just made has a different address in memory than the one stored at 'a'. You don't see this with None, False, or True because these are all values that are singletons (they all refer to the same section of memory) so using the 'is' keyword works.
You'll also find that CPython interns strings so the following works.
>>> 'a' is 'a'
True
You should not rely on this. It is an implementation detail and this is not specified to work with every version of Python.
Solution 2:
No. If you want to run code when the value is false but isn't None
, this would fail horribly.
Use is None
if you're checking for identity with the None
object. Use not value
if you just want the value to be False.
Solution 3:
Your use of the is
operator is a little problematic. if value is []
will always be false, for example, because no two active lists have the same identity. It works great with None
because None
is a singleton (all references to None
are the same object) but for other comparisons, use ==
.
However, if value
and if not value
are perfectly readable and useful. IMHO there's no need to be more specific, unless you need to treat various types of truthy or falsy values differently, as, for example, distinguishing between 0 and None
.