wiki:PythonIntroLogicalAnd

Version 5 (modified by sgk, 13 years ago) (diff)

--

Python:&&が無い

Python情報 >> Pythonを学ぶ人に

Pythonには「&&」と「||」がありません。 じゃ、論理積とか論理和はどうするのか。 心配いりません。代わりに「and」と「or」を使ってください。

なーんだ。それだけのこと。

でもちょっと待ってください。 なぜ「&&」と「||」ではなく、「and」と「or」なのでしょうか。 「and」は、C言語でいうところの「&&」と全く同じなのでしょうか。 実はちょっと違います。

and」は、以下のような動作をします。

  • 左辺が偽(False/0/"")なら、右辺の評価(実行)をせずに、左辺の値を返す。
    • 右辺の評価を行わないのが重要。
    • 「偽を返す」のではなくて、左辺の値をそのまま返すのが重要。
  • 左辺が真(False/0/""以外)なら、右辺の値を返す。
    • 「右辺の値によって真か偽を返す」のではなくて、右辺を評価して値をそのまま返すのが重要。

or」は、以下のような動作をします。

  • 左辺が偽(False/0/"")なら、右辺の値を返す。
    • 「右辺の値によって真か偽を返す」のではなくて、右辺を評価して値をそのまま返すのが重要。
  • 左辺が真(False/0/""以外)なら、右辺の評価(実行)をせずに、左辺の値を返す。
    • 右辺の評価を行わないのが重要。
    • 「真を返す」のではなくて、右辺の値をそのまま返すのが重要。

Pythonでは、こういう意味を明確化する目的で、「&&」と「||」ではなく「and」と「or」を使うことを選択したのでしょう。たとえば、以下のように書けば、「xの値はabなんだな」「aがダメ(偽)の場合だけbなんだな」ってことが伝わりやすいです。

x = a or b

上記の動作のルール、覚えてられないですよね。以下のように考えれば簡単です。

  • a and bは、aが偽ならばaaが真ならばbを選ぶ。
  • a or bは、aが偽ならばbaが真ならばaを選ぶ。
  • いずれも、aは必ず評価する。bは必要な場合だけ評価する。