這令我感到困惑。即使不知道的優先順序,一個可以檢查出兩種可能的方式收集的表達會給False
:0 0 == 0(#evaluates爲真?)
>>> (0 is 0) == 0
False
>>> 0 is (0 == 0)
False
但
>>> 0 is 0 == 0
True
怎麼來的?
這令我感到困惑。即使不知道的優先順序,一個可以檢查出兩種可能的方式收集的表達會給False
:0 0 == 0(#evaluates爲真?)
>>> (0 is 0) == 0
False
>>> 0 is (0 == 0)
False
但
>>> 0 is 0 == 0
True
怎麼來的?
當鏈在Python比較運算符,經營者實際上沒有施加到另一個運營商的結果,而是被單獨地施加到操作數。也就是說x ? y ?? z
(其中?
和??
都應該站在對一些比較操作)既不等同於(x ? y) ?? z
也不x ? (y ?? z)
,而是x ? y and y ?? z
。
這是>
和合作是特別有用的,讓你寫的東西像min < x < max
,並讓它做你想要什麼,而不是一個布爾值比較的數字(這將在大多數其他語言發生)。
您正在使用比較運算鏈。表達被解釋爲:
(0 is 0) and (0 == 0)
比較可以被任意鏈的,例如,
x < y <= z
相當於x < y and y <= z
,不同之處在於y
只計算一次(但在這兩種情況下z
當x < y
被發現是錯誤的時候根本不評估)。
0 is 0
因爲Python interns small integers,實現細節,讓您得到(True) and (True)
生產True
是真實的。
它必須是欺騙,但'0是0 == 0'被解析爲'(0是0)和(0 == 0)',就像'一個== b == C'被解析爲'a == b和b == c'。 –
@PaulHankin你應該已經離開,作爲一個asnwer –
看看這篇文章:瞭解Python的「是」經營者(http://stackoverflow.com/questions/13650293/understanding-pythons-is-operator) –