Here are a couple of guidelines:
- Boolean operators are usually used on boolean values but bitwise operators are usually used on integer values.
- Boolean operators are short-circuiting but bitwise operators are not short-circuiting.
The short-circuiting behaviour is useful in expressions like this:
if x is not None and x.foo == 42:
# ...
This would not work correctly with the bitwise &
operator because both sides would always be evaluated, giving AttributeError: 'NoneType' object has no attribute 'foo'
. When you use the boolean and
operator the second expression is not evaluated when the first is False. Similarly or
does not evaluate the second argument if the first is True.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…