Pythonまたは演算子に関するガイド

OR演算子は Python に存在する 3 つの論理演算子 (and,or,not`) の 1 つで、渡されたオペランドを論理的に評価するものです。

簡単に言うと、2つのオペランドが渡されると、論理式の最終的な値が TrueFalse のどちらかを決定します。

最終的な論理式の値を評価する仕組みは、ブール代数として知られる一連の規則に基づいている。

このガイドでは、Pythonの or 演算子と、その最も一般的な使用例について説明します。

または オペレータの基本

Pythonの or 演算子は、与えられた2つのオペランドに対して論理和を実行するだけです。

オペランドが単純に2つのブール値であると仮定すると、 or 演算子の使い方のルールはとてもわかりやすいものになります。

2つのオペランドのどちらかが True という値を持っていれば、式全体が True という値になります。

それ以外の場合、式全体は False という値を持ちます。

さて、次に or 演算子の真理値表を見てみましょう。

オペランド1 オペランド2 OR式の値
真|真|真|真|真|真
真|偽|真|の順
False True True
偽|偽|偽|偽

この表は、論理和の法則を説明したものです。

この表から、or 演算子はオペランドの両方が同様に False である場合にのみ、結果として False を生成することがわかります。

これらのことから、遅延評価という概念が浮かび上がってきます。

数学的な演算の計算を最適化するために使われるメカニズムです。

このケースでは、 or 演算子を使ったブール式の評価処理を高速化するために使用されます。

我々はすでに、 or 式の2つのオペランドのどちらかが True であれば、 True 値になることを知っています。

したがって、複数のオペランドからなるブール式では、それぞれのオペランドを個別に評価する必要は全くありません。

オペランドの値を次々に読み込んでいけばよいのです。

初めて True に出会ったときは、他のオペランドをすべて無視して、式全体を True として評価すれば安全です。

一方、Trueという値を持つオペランドがない場合は、式全体をFalseという値で評価しなければなりません。

これが遅延評価の基本的な考え方で、評価する必要がないときは評価しないようにします。

ブール型変数の使用またはブール型変数への適用

Python の or 演算子は、2 つのオペランドを評価するために使用されます。

このセクションでは、オペランドが両方ともブール値である場合に焦点を当てます。

場合によっては、or 演算子はブール値以外でも使用できますが、それについては次のセクションで説明します。

それでは、or 演算子を 2 つのブール値で使用する方法を見てみましょう。

# Two Boolean values
result1 = True or False # Expected to be `True`
result2 = False or False # Expected to be `False`


print('R1:', result1)
print('R2:', result2)


この例では、or 演算子がどのように単純なブール値のみからなる式を評価するのかがわかります。

前のセクションで説明したように、このコード片は次のような出力を持つことになります。

R1: True
R2: False


前の例では、ブール式の名前を result1result2 としました。

このようにして、それぞれ TrueFalse という値を持つ 2 つのブール変数を作成しました。

この2つの変数は、別のブール式のオペランドとして使うことができるので、より複雑なブール式の部分式と考えることができます。

これが、より複雑なブール式を階層的に構築するために使われる一般的な原理です。

result3 = result1 or result2 # `True` or `False` <=> `True`
result4 = result3 or True # `True` or `True` <=> `True`


print('R3:', result3)
print('R4:', result4)


予想通り、これは出力されます。

R3: True
R4: True


result4` は複数の部分式とブール値からなる複雑なブール式です。

これを展開する過程を見てみよう。

1. result4 = result3 or True
2. result4 = (result1 or result2) or True
3. result4 = ((True or False) or (False or False)) or True


論理演算子 or の連想法に基づいて、演算子を適用する順番はブール式の値に影響を与えないことが分かっているので、括弧は必要ありません。

したがって、括弧をすべて削除すれば、result4をもう一段階変形することができます。

 result4 = True or False or False or False or True


非ブール型変数の使用または非ブール型変数への適用

Python の or 演算子は Boolean 以外の変数でも使うことができます。

ブール型変数と非ブール型変数を混在させることもできます。

このセクションでは、異なるデータ型の変数に対する or 演算子の使い方を説明するいくつかの例について説明します。

一般的に、Python のオブジェクトや変数は、そのクラスが False を返す __bool__() メソッドや 0 を返す __len__() メソッドを定義していなければ True であるとみなされます。

簡単に言うと、 False とみなされるオブジェクトは、 False になるように定義されているか、空のリスト、タプル、文字列、辞書など、空であるものだけということになる。

Pythonの公式ドキュメントには、 False とみなされる最も一般的な組み込みオブジェクトのリストが掲載されています。

  • false と定義された定数: NoneFalse.
  • 任意の数値型のゼロ。0,0.0,0j,Decimal(0),Fraction(0, 1)* 空のシーケンスとコレクション:NoneFalse` です。
  • 空のシーケンスとコレクション。空のシーケンスとコレクション: '', (), [], {}, set(), range(0).

注意: これらはFalsy Valuesとも呼ばれ、直感的に False というブール値に還元できるような値です。

その反対の値はTruthy Values(真実の値)である。

もう一つ非常に重要な事実は、この場合の or 演算子は、オブジェクトの True/False 値ではなく、実際のオブジェクトを返すということです。

では、上記の動作を説明する例を見てみましょう。

exp = {} or 'This is a string'


先に述べたように、最初のオペランド {} (空の辞書) は False と見なされ、2番目のオペランド 'This is a string' (空の文字列ではない) は True と見なされます。

これは、前の式が暗黙のうちに次のように変換されることを意味します。

# exp = False or True


ここで、expTrueと評価されます。

しかし、元の exp の値を表示しようとすると、 True ではなく、次のような出力になります。

'This is a string'


この例は、 or 演算子が True/False 値の代わりにオブジェクトそのものを返す場合を示しています。

この動作をまとめるために、or 演算子の変更された(真理)表で説明することができます。

object1 (値) object2 (値) object1 oror object2 (戻り値)
真|真|object1|。
真|偽|object1|。
偽の 真の object2
False False object2

これは、通常のブール値とオブジェクトをブール式で組み合わせたときにも適用されます。

もし式が True とみなされる値を少なくとも1つ含んでいれば、式の値は True ですが、戻り値はその中の最初の True 要素に基づいて変化することができます。

もし、式の中で最初に見つかった True オペランドが単純なブール値であれば、戻り値は True となりますが、最初の True 要素が何らかのオブジェクトであれば、戻り値はそのオブジェクト自身となります。

例えば、以下の式は True を返します。

0 or True


また、次の式は [1, 2, 3] を返します。

これは、最初に見つかった True オペランドを表します。

False or [1, 2, 3]


一方、論理式が False の場合、つまり True オペランドが見つからなかった場合、その戻り値は最後のオペランドである object か False のいずれかとなります。

{} or 0.0 or [] or False or ()
# Output >> ()


結論

このガイドでは、Python の or 演算子の使用法を説明しました。

Python の構文を紹介し、 or 演算子がどのようにブール式を評価し、オペランドに基づいて適切な戻り値を決定するかについて説明しました。

論理式の評価という主な用途の他に、 or 演算子は他の使用例でも非常に便利です。

その特徴は、変数のデフォルト値や関数のデフォルトの戻り値などを設定する必要がある場合に適しています。

しかし、それらの特別な使用例はこの記事の範囲をはるかに超えているので、or 演算子が利用できるすべての使用例を探検してもらいたいと思います。

タイトルとURLをコピーしました