#
10 ブール演算 (boolean operation)

ブール演算は、全ての Python 演算子の中で、最も低い優先順位になっています:

  expression | ::= | or_test [if or_test else 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

  Download entire grammar as text.

ブール演算のコンテキストや、式が制御フロー文中で使われる最には、 以下の値: `False`、`None` 、すべての型における数値のゼロ、空の文字列と コンテナ (文字列、タプル、リスト、辞書、set、frozenset を含む) は偽 (false) であると 解釈されます。それ以外の値は真 (true) であると解釈されます。

演算子 `not` は、引数が偽である場合には `1` を、それ以外の 場合には `0` になります。

式 `x if C else y` はまず C を評価 (x ではないです)します； もし C が true な場合、x が評価されてその値が返されます；そうでなければ、y が 評価されてその値が返されます。 バージョン 2.5 で 新たに追加 された仕様です。

式 `x and y` は、まず x を評価します; x が偽なら、x の値を返します; それ以外の場合には、 y の値を評価し、その結果を返します。

式 `x or y` は、まず x を評価します; x が真なら、x の値を返します; それ以外の場合には、 y の値を評価し、その結果を返します。

(`and` も `not` も、返す値を `0` や `1` に 制限するのではなく、最後に評価した引数の値を返すので注意してください。 この仕様は、例えば `s` を文字列として、`s` が空文字列の 場合にデフォルトの値に置き換えるような場合に、`s or 'foo'` と書くと期待通りの値になるために便利なことがあります。 `not` は、式の値でなく独自に値を作成して返すので、 引数と同じ型の値を返すような処理に煩わされることはありません。 例えば、 `not 'foo'` は、 `''` ではなく `0` になります)