[Python]論理演算 and, or, notについて

Python 組込み型

Pythonの論理演算子(or, and, not)は、一般的なorやandの考え方とちょっと違っています。何も考えずに使うと不具合動作の元になりそうですので、今回、自分自身への備忘録も兼ねて改めてまとめてみました。

# 2019/1/2 誤記修正
# 2019/2/3 微修正

確認した環境

  • Ubuntu16.04LTS
  • Python3.7.0

論理演算子の定義

公式リファレンスにもあるとおり、Pythonでの論理演算子は下記の通り定義されています。

演 算結 果備 考
x or yx がFalseなら y, そうでなければ xxがFalseの場合に、yが評価される
(短絡評価)
x and yx がFalseなら x, そうでなければ yxがTrueの場合に、yが評価される
(短絡評価)
not xx がFalseなら True, そうでなければ False"==", "<", ">" 等の比較演算子よりも優先度は低い

ちょっと分かり難いので、もう少し書き下してみます。

論理和(or)

論理和(or)は、以下のように表せます。

x y 結果
備考
TrueTrueTruexがTrueなので、xを出力
TrueFalseTrue
FalseTrueTruexがFalseなので、yを出力
FalseFalseFalse

コマンドライン上で確認してみます。

>>> True or True
True
>>> True or False
True
>>> False or True
True
>>> False or False
False

気をつけたいのは、結果はブール値ではなく、x(またはy)の値で返るということです。よって、例えばx=10、y=20とした場合は以下のような結果になります。 

>>> x = 10
>>> y = 20
# xはTrue(bool(10) はTrue)なので、xを出力
>>> x or y
10

ちなみに、if文やwhile部の条件部分で使われる場合は、以下のようにPythonがbool値に自動で変換してくれるようです。

>>> x = 10
>>> y = 20
>>> if x or y:
...     print('True')
... else:
...     print('False')
... 
True

また、x(演算子の左辺)がFalseの場合にのみ、y(右辺)の処理が行われるので(短絡評価)、yの実行結果が必要な場合は注意が必要です。(どのような場面で使われるのかはちょっと思いつきませんが、、)

論理積(and)

同様に、andも書き下してみます。

x y 結果
備考
TrueTrueTruexがTrueなので、yを出力
TrueFalseFalse
FalseTrueFalsexがFalseなので、xを出力
FalseFalseFalse

コマンドライン上で確認してみます。

>>> True and True
True
>>> True and False
False
>>> False and True
False
>>> False and False
False

こちらもorと同様に、結果はxまたはyの値となります。上記同様に、x=10, y=20という数値の場合の挙動を示します。

>>> x = 10
>>> y = 20
# xはTrue(bool(10) はTrue)なので、yを出力
>>> x and y
20

またこれもorと同様ですが、x(演算子の左辺)がTrueの場合にのみ、y(右辺)の処理が実行されるので(短絡評価)、yの実行結果が必要な場合は注意が必要です。

否定(not x)

notは、上記2つと異なり、bool値を返します。

x結果
TrueFalse
FalseTrue

コマンドライン上で確認してみます。

>>> not True
False
>>> not False
True

また、この演算子は論理演算子(”==”, “>”, “<“など)の非ブール演算子よりも優先度が低いので、以下のような書き方には注意が必要です。

# 以下は、not (x == y)と解釈される
>>> not x == y
False

# 以下は構文エラー
>>> x == not y
  File "", line 1
    x == not y
           ^
SyntaxError: invalid syntax

まとめ

今回は、Pythonで使われる論理演算子or, and, notについてまとめました。短絡評価となる点や、XやYの値が返る点は、一般的なORやANDと異なっていますので、注意が必要です。

Learn more...

書籍でもう少し詳しく学びたい場合はこちらもどうぞ。筆者もかなり参考にさせてもらっています!

シェアする
ひびきをフォローする
Hbk project