Boolean operations have the lowest priority of all Python operations:
expression |
::= | or_test | lambda_form |
or_test |
::= | and_test | or_test "or" and_test |
and_test |
::= | not_test | and_test "and" not_test |
not_test |
::= | comparison | "not" not_test |
lambda_form |
::= | "lambda" [parameter_list]: expression |
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 ''
.)
See About this document... for information on suggesting changes.