a = True print(a and 0 or 99) # ==> 99
a = True print(a and 0 or 99) # ==> 99
得到的計算結果不是布爾類型,而是數字99,這是為什么呢?
因為Python把0、空字符串和None看成False,其他數值和非空字符串都看成True,所以:
True and 0計算結果是0?
繼續計算0 or 99計算結果是 99?
因此,結果是99。
需要注意的是,not計算的優先級是高于and和or的。
始終不明所以,求更詳細的解說
2025-02-11
Python布爾運算的規則
在Python中,布爾運算符
and和or的邏輯是基于“短路”(short-circuiting)的,這意味著它們會在確定結果后立即停止計算。具體規則如下:and運算:如果
A為True(或者等價于True的值,如非零數字、非空字符串等),則返回B的值。A and B: -如果A為False(或者等價于False的值,如0、None、空字符串""等),則直接返回A的值。or運算:如果
A為True(或者等價于True的值),則直接返回A的值。如果A``為
False(或者等價于False的值),則返回B的值。A or B:代碼的逐步解析
a and 0:a的值是True。根據
and的規則,True and 0會先判斷True,因為True為真值,所以返回第二個值0。因此,
a and 0的結果是0。**
0 or 99: ** ? -0是一個假值(等價于False)。根據
or的規則,0 or 99會先判斷0,因為0為假值,所以返回第二個值99。因此,
0 or 99的結果是99。最終結果
所以,整個表達式
a and 0 or 99的計算過程是:先計算
a and 0,結果是0。再計算
0 or 99,結果是99。因此,最終輸出的結果是
99。關于優先級
你提到的
not運算符的優先級高于and和or,這是正確的。但在你的表達式中并沒有not運算符,所以優先級問題在這里并不影響結果。總結
Python的布爾運算符
and和or是基于短路邏輯的,它們會根據第一個操作數的值決定是否繼續計算。在你的例子中,
a and 0的結果是0,而0 or 99的結果是99。最終結果是
99,而不是布爾值True或False,因為布爾運算的結果可以是任何值,而不僅僅是布爾類型。