Python論理判断の短絡メカニズム
pythonでは,類似&,|,and,orの論理判断記号をよく用いる.ではand,orと&,|の違いは何でしょうか.現在、私が知っているのは主に以下の2つです.
1.ビット演算
演算子の両方が数値変数の場合、たとえば使用&,|の場合、ビット演算を行い、aは01、bは10 とする. and,orを用いる、変数が0であるか否かを判断し、いずれも0でない場合、andは後ろの数を返し、orは前の数 を返す.
2.ショートメカニズム
演算子の両側が論理変数である場合、and,orは短絡機構を有し、&,|はない
ショートメカニズムとは、andを使用する場合:第1条件が偽の場合、第2条件は判断しないので、第2条件に誤りがあっても誤用orを報告しない場合、第1条件が真の場合、第2条件は判断しないので、第2条件に誤りがあっても誤用orを報告しない
例:
1.ビット演算
演算子の両方が数値変数の場合、たとえば
a=1, b=2
a & b = 0
a | b = 3
a and b = 2
a or b = 1
0 and 1 = 0
0 or 1 = 1
2.ショートメカニズム
演算子の両側が論理変数である場合、and,orは短絡機構を有し、&,|はない
ショートメカニズムとは、andを使用する場合:第1条件が偽の場合、第2条件は判断しないので、第2条件に誤りがあっても誤用orを報告しない場合、第1条件が真の場合、第2条件は判断しないので、第2条件に誤りがあっても誤用orを報告しない
例:
a = 1
b = [0,1]
if a == 2 & b[2] == 1:
print('pass')
# index IndexError: list index out of range
if a == 2 and b[2] == 1:
print('pass') # and
# pass
if a == 1 or b[2] == 1:
print('pass') # ,or
# pass