["python","comparison","boolean","readability"]
Python: if not val, vs if val is None

I've always coded in the style of if not value, however, a few guides have brought to my attention that while this style works, it seems to have 2 potential problems: It's not completely readable; if value is None is surely more understandable. This can have implications later (and cause subtle bugs), since things like [] and 0 will evaluate to False as well. I am also starting to apply this idea to other comparisons, such as: if not value vs if value is False if not value vs if value is [] And so goes the list... The question is, how far do you go with the principle? Where to draw the line, while keeping your code safe? Should I always use the if value is None style no matter what?
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(<list>)). 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.