論理演算子(or、and)を使った真偽判定の方法について解説します。
はじめに
Pythonチュートリアル > 5.7. 条件についてもう少しより、以下のサンプルコードを見てみます。
>>> string1, string2, string3 = '', 'Trondheim', 'Hammer Dance'
>>> non_null = string1 or string2 or string3
>>> non_null
'Trondheim'
電気系学部出身の私には、なぜ、’Trondheim’が出力結果になるか分からなかったので、色々調べてみました。
論理演算子について、電気回路とプログラミング言語の違い
電気回路的な理解は以下の通り。
論理演算 | 入力 | 出力 |
or(論理和) | 全て’0′ | 0 |
or(論理和) | いずれか1つでも’1′ | 1 |
and(論理積) | 全て’1′ | 1 |
and(論理積) | いずれか1つでも’0′ | 0 |
0をFalse、1をTrueと置き換えれば、プログラミングにおいても概ね理解としては合っているようです。
ただし、文字列同士の論理演算については、上記の理解では足りていない(というわけで、はじめの疑問に行き着く)。
プログラミング言語においては、短絡評価という評価方法が存在します。
短絡評価方法は以下の通り。
論理演算 | 評価方法 |
or(論理和) | 評価対象の引数がTrueの場合、その引数を結果として出力。 評価対象の引数がFalseの場合、その次の引数を評価。 |
and(論理積) | 評価対象の引数がTrueの場合、その次の引数を評価 評価対象の引数がFalseの場合、その引数を結果として出力。 |
‘0’、’1’の評価においても、全ての値を評価しなくても結果が得られるので、効率が良さそうな評価方法です。
言語によっては、非短絡評価と短絡評価を区別されているもの、いずれか一方のみを使えるもの、とがあります。
Pythonについては、短絡評価のみを取り扱います。
Pythonにおける、文字列の論理演算
はじめに示したサンプルコードを、もう一度見直してみます。
>>> string1, string2, string3 = '', 'Trondheim', 'Hammer Dance'
>>> non_null = string1 or string2 or string3
>>> non_null
'Trondheim'
それぞれの変数をbool値で評価すると以下の通り。
string1 = ‘ ‘ → False
string2 = ‘Trondheim’ → True
string3 = ‘Hammer Dance’ → True
orで短絡評価した場合、左から順に初めてTrueになる値が出力されるため、’Trondheim’が出力結果として得られます。
結構スッキリしました。