今天發現一個一不小心差點出錯的問題,問題本身其實很簡單,但一旦不注意就可能會出問題:
問題描述:
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而不是&, 不然很容易出問題。