More on Conditions
==================
The conditions used in `while' and `if' statements above can contain
other operators besides comparisons.
The comparison operators `in' and `not in' check whether a value occurs
(does not occur) in a sequence. The operators `is' and `is not'
compare whether two objects are really the same object; this only
matters for mutable objects like lists. All comparison operators have
the same priority, which is lower than that of all numerical operators.
Comparisons can be chained: e.g., `a < b == c' tests whether `a' is
less than `b' and moreover `b' equals `c'.
Comparisons may be combined by the Boolean operators `and' and `or',
and the outcome of a comparison (or of any other Boolean expression)
may be negated with `not'. These all have lower priorities than
comparison operators again; between them, `not' has the highest
priority, and `or' the lowest, so that `A and not B or C' is equivalent
to `(A and (not B)) or C'. Of course, parentheses can be used to
express the desired composition.
The Boolean operators `and' and `or' are so-called _short-circuit_
operators: their arguments are evaluated from left to right, and
evaluation stops as soon as the outcome is determined. For example, if
`A' and `C' are true but `B' is false, `A and B and C' does not
evaluate the expression `C'. In general, the return value of a
short-circuit operator, when used as a general value and not as a
Boolean, is the last evaluated argument.
It is possible to assign the result of a comparison or other Boolean
expression to a variable. For example,
>>> string1, string2, string3 = '', 'Trondheim', 'Hammer Dance'
>>> non_null = string1 or string2 or string3
>>> non_null
'Trondheim'
Note that in Python, unlike C, assignment cannot occur inside
expressions. C programmers may grumble about this, but it avoids a
common class of problems encountered in C programs: typing `=' in an
expression when `==' was intended.