Python論理判断の短絡メカニズム


pythonでは,類似&,|,and,orの論理判断記号をよく用いる.ではand,orと&,|の違いは何でしょうか.現在、私が知っているのは主に以下の2つです.
1.ビット演算
演算子の両方が数値変数の場合、たとえばa=1, b=2
  • 使用&,|の場合、ビット演算を行い、aは01、bは10
  • とする.
    a & b = 0
    a | b = 3
    
  • and,orを用いる、変数が0であるか否かを判断し、いずれも0でない場合、andは後ろの数を返し、orは前の数
  • を返す.
    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