and / or operators return value
Solution 1
The and
and or
operators do return one of their operands, not a pure boolean value like True
or False
:
>>> 0 or 42
42
>>> 0 and 42
0
Whereas not
always returns a pure boolean value:
>>> not 0
True
>>> not 42
False
Solution 2
See this table from the standard library reference in the Python docs:
Solution 3
from Python docs:
The operator not yields True if its argument is false, False 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.
Python's or
operator returns the first Truth-y value, or the last value, and stops. This is very useful for common programming assignments that need fallback values.
Like this simple one:
print my_list or "no values"
This will print my_list
, if it has anything in it. Otherwise, it will print no values
(if list is empty, or it is None
...).
A simple example:
>>> my_list = []
>>> print my_list or 'no values'
no values
>>> my_list.append(1)
>>> print my_list or 'no values'
[1]
The compliment by using and
, which returns the first False-y value, or the last value, and stops, is used when you want a guard rather than a fallback.
Like this one:
my_list and my_list.pop()
This is useful since you can't use list.pop
on None
, or []
, which are common prior values to lists.
A simple example:
>>> my_list = None
>>> print my_list and my_list.pop()
None
>>> my_list = [1]
>>> print my_list and my_list.pop()
1
In both cases non-boolean values were returned and no exceptions were raised.
atp
Updated on October 21, 2021Comments
-
atp over 2 years
I was watching a 2007 video on Advanced Python or Understanding Python, and at 18'27" the speaker claims "As some may know in Python
and
andor
return one of the two values, whereasnot
returns always a boolean." When has this been the case?As far as I can tell,
and
andor
return booleans, too.