論理演算¶
論理演算とは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