2017-09-27 49 views
0

我在Python中編寫我的腳本時遇到了反直覺問題。爲什麼這些操作數返回False?

>>> def foo(): 
...  return False 
... 
>>> foo() 
False 
>>> foo()==False 
True 
>>> i=1 
>>> i!=0 
True 
>>> foo()==False & i!=0 
False 
>>> (foo()==False) & i!=0 
True 
>>> 

正如你可以看到FOO()==假回報我!= 0呢,所以直覺上我希望真&真返回,但是當我跑富()==假&我!= 0我收到假,當我運行(富()==假)&我!= 0我得到的最初預期真。這裏發生了什麼?

回答

2

這是簡單的pythons操作順序。在

foo()==False & i!=0 

位單位和&==一個更高的優先級。因此,你真的評估

foo()==(False & i)!=0 

如果更換按位和&與邏輯和and,你的答案出來預期

>>> foo()==False and i!=0 
True 

瞭解更多關於它here

1

&在python中的優先級高於==!=,所以使用(foo()==False) & (i!=0)來確保沒有操作數優先級衝突發生。

1

的原因是,存在在python算符優先,請參閱doc:

比較(==,!=)具有的優先級低於按位與(&):

foo()==False & i!=0 ==>foo()==(False & i)!=0

(foo()==False) & i!=0 ==>((foo()==False) & i)!=0

0

&是位運算符,您可以使用它來查看數字是偶數還是奇數。由於foo()返回的是False,這被認爲是0而0不被認爲是奇數,所以雙向運算符&將返回False,因爲它不是奇數。

0

根據python文檔6.16。運算符優先級&比==更高的優先級或!= 因此當你運行FOO()==假&我!= 0如下

foo()==False & i!=0 
foo() == (False & True)!= 0 #since 1 is nothing but True 
Foo() == False != False 

哪個是假的評估。

https://docs.python.org/3/reference/expressions.html#summary

我最初嘗試包括表,但不知道該怎麼做的計算器。抱歉。