5.10 Boolean operations
Boolean operations have the lowest priority of all Python operations:

In the context of Boolean operations, and also when expressions are used by control
flow statements, the following values are interpreted as false: None , numeric
zero of all types, empty sequences (strings, tuples and lists), and empty mappings
(dictionaries). All other values are interpreted as true.
The operator not yields 1 if its argument is
false, 0 otherwise.
The expression x and y first evaluates x;
if x is false, its value is returned; otherwise, y is evaluated and
the resulting value is returned.
The expression x or y first evaluates x;
if x is true, its value is returned; otherwise, y is evaluated and
the resulting value is returned.
(Note that neither and nor or
restrict the value and type they return to 0 and 1 , but rather
return the last evaluated argument. This is sometimes useful, e.g., if s is a
string that should be replaced by a default value if it is empty, the expression s
or 'foo' yields the desired value. Because not has to
invent a value anyway, it does not bother to return a value of the same type as its
argument, so e.g., not 'foo' yields 0 , not '' .)
