Python與運算: &(按位與) 與 and(邏輯與) 的使用教訓

今天發現一個一不小心差點出錯的問題,問題本身其實很簡單,但一旦不注意就可能會出問題:

問題描述:

4個條件都是Ture,但一旦使用&將其連接就會是False;

但如果用and將其連接則會是Ture。

(Pdb) fakeIm.data.size()[0]==1
True
(Pdb) fakeIm.data.size()[1]==1
True
(Pdb)  fakeIm.data.size()[2]==256
True
(Pdb) fakeIm.data.size()[3]==256
True

(Pdb) fakeIm.data.size()[0]==1 & fakeIm.data.size()[1]==1 & fakeIm.data.size()[2]==256 & fakeIm.data.size()[3]==256
False

(Pdb) fakeIm.data.size()[0]==1 and fakeIm.data.size()[1]==1 and fakeIm.data.size()[2]==256 and fakeIm.data.size()[3]==256
True

當然,如果加上括號則使用&也會是Ture:

(Pdb) (fakeIm.data.size()[0]==1) & (fakeIm.data.size()[1]==1) & (fakeIm.data.size()[2]==256) & (fakeIm.data.size()[3]==256)
True

 

原因分析:

顯然,這是運算符優先級的問題,&優先級比==要高,因此會出現問題。python運算符優先級如下,

 

總結:

爲了避免出現意外,邏輯與時最好使用();實在想懶的話也要使用and而不是&, 不然很容易出問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章