論理演算

論理演算とはTrueとFalseの間の演算で、結果がTrueまたはFalseになるものです。 Pythonでもandやorの演算を行えますが、結果がTrueまたはFalseではない場合があります。

論理型(ブール型):True、False

真偽値

真偽値は、真または偽と判断されるもので、以下のように決まります。

  • 真: True 、非ゼロの数値、空でない文字列、空でないタプル、空でないリスト、空でない辞書、Noneでないオブジェクト

  • 偽: False 、ゼロ、空文字列、空のタプル、空のリスト、空の辞書、None

論理積(A and B)

A

B

結果

True

True

True

True

False

False

False

True

False

False

False

False

論理和(A or B)

A

B

結果

True

True

True

True

False

True

False

True

True

False

False

False

排他的論理和(A xor B)

A

B

結果

True

True

False

True

False

True

False

True

True

False

False

False

※ Pythonでは、排他的論理和の論理演算子(xor)はありません。ビット単位の排他的論理和は、「^」でできます。

Python(A and B)

Pythonでは、and演算子、or演算子でオブジェクトを比較すると戻りとしてオブジェクトが返ります。 and演算子では、AがFalse扱いのオブジェクトだった場合はBは実行されずAの値が返ります。

A

B

結果

True

True

B

True

False

B

False

True

A

False

False

A

以下の例では、変数c, 変数dはFalse扱いになります。

>>> a = 1
>>> b = "Hello"
>>> c = 0
>>> d = ''
>>> a and b
'Hello'
>>> a and c
0
>>> c and a
0
>>> c and d
0

Python(A or B)

or演算子では、AがTrue扱いのオブジェクトだった場合はBは実行されずAの値が返ります。

A

B

結果

True

True

A

True

False

A

False

True

B

False

False

B

>>> a = 1
>>> b = "Hello"
>>> c = 0
>>> d = ''
>>> a or b
1
>>> a or c
1
>>> c or b
'Hello'
>>> c or d
''

短絡評価の有無

変数に代入せずに直接関数を利用すると短絡評価(左辺の式で評価が決まってしまうと右辺の式が実行されない)の副作用がでます。

import random
random.seed(0)
cond = False and random.random()  # 短絡評価あり
print(random.random())
# 0.8444218515250481

def _and(a, b):
    return a and b
random.seed(0)
cond = _and(False, random.random()) # 短絡評価なし
print(random.random())
# 0.7579544029403025
当コンテンツの知的財産権は株式会社ビープラウドに所属します。詳しくは利用規約をご確認ください。