Python:&&が無い
Pythonには「&&」と「||」がありません。 じゃ、論理積とか論理和はどうするのか。 心配いりません。代わりに「and」と「or」を使ってください。
なーんだ。それだけのこと。
でもちょっと待ってください。 なぜ「&&」と「||」ではなく、「and」と「or」なのでしょうか。 「and」は、C言語でいうところの「&&」と全く同じなのでしょうか。 実はちょっと違います。
「and」は、以下のような動作をします。
- 左辺が偽(False/0/"")なら、右辺の評価(実行)をせずに、左辺の値を返す。
- 右辺の評価を行わないのが重要。
- 「偽を返す」のではなくて、左辺の値をそのまま返すのが重要。
- 左辺が真(False/0/""以外)なら、右辺の値を返す。
- 「右辺の値によって真か偽を返す」のではなくて、右辺を評価して値をそのまま返すのが重要。
「or」は、以下のような動作をします。
- 左辺が偽(False/0/"")なら、右辺の値を返す。
- 「右辺の値によって真か偽を返す」のではなくて、右辺を評価して値をそのまま返すのが重要。
- 左辺が真(False/0/""以外)なら、右辺の評価(実行)をせずに、左辺の値を返す。
- 右辺の評価を行わないのが重要。
- 「真を返す」のではなくて、右辺の値をそのまま返すのが重要。
Pythonでは、こういう意味を明確化する目的で、「&&」と「||」ではなく「and」と「or」を使うことを選択したのでしょう。たとえば、以下のように書けば、「xの値はaかbなんだな」「aがダメ(偽)の場合だけbなんだな」ってことが伝わりやすいです。
x = a or b
上記の動作のルール、覚えてられないですよね。以下のように考えれば簡単です。
- a and bは、aが偽ならばa、aが真ならばbを選ぶ。
- a or bは、aが偽ならばb、aが真ならばaを選ぶ。
- いずれも、aは必ず評価する。bは必要な場合だけ評価する。
