Python3エンジニア認定基礎試験の勉強中です。
基礎の基礎を総復習...メモがわりに残していきます。
短絡演算
💡A and B
1. Aを評価し、その結果の真偽を判定する
2. 判定が「偽」であればBは評価せずにAの判定結果を返す
3. 判定が「真」であればBを評価し、その判定結果を返す
💡A or B
1. Aを評価し、その結果の真偽を判定する
2. 結果が「真」の時、Bを評価せずにAの判定結果を返す
3. 結果が「偽」の時、Bを評価し、その判定結果を返す
以下のようなコードがあった場合はどうなるか??
def num(value):
return value
value1 = num(0) and num(1) and num(2)
value2 = num(0) or num(1) or num(2)
print(value1, value2)
💡andが複数続く場合
1. 左から順に評価していく
2. 最初に「偽」になったものが最終結果として返される
3. 「偽」になるものがないときは、一番最後の評価結果を返す
💡orが複数続く場合
1. 左から順に評価していく
2. 最初に「真」になったものが最終結果として返される
3. 「真」になるものがないときは、一番最後の評価結果を返す
数値の場合
=> 「0」が「偽」、「0以外」が「真」
文字列、リストなどの場合
=> 「空」が「偽」、「空以外」が「真」
ユーザー定義クラスのインスタンスの場合
=> デフォルトは「真」、__bool__や__len__を定義することで変更可能
(公開後、ご指摘を受け修正、追記いたしました。)
以上を踏まえて先ほどのコードの結果を見てみると
value1 = num(0) and num(1) and num(2)
num(0) = 0 #False
① andが複数続く式なので、最初に「偽」となったnum(0)で評価を終わり、value1 = 0
となる
value2 = num(0) or num(1) or num(2)
num(0) = 0 #False
num(1) = 1 #True
② orが複数続く式なので、最初に「真」になったnum(1)で評価を終わり、value2 = 1
となる
上記の①②より、このコードの実行結果は以下の通り。
0 1