有人能解釋這些結果如何是可能的(Python 2.6中):python如何評估這個?
>>> 1<3>2
True
>>> (1<3)>2
False
>>> 1<(3>2)
False
我認爲,過去兩年中的一個將匹配第一個,但顯然在第一條語句的運營商以某種方式連接?
有人能解釋這些結果如何是可能的(Python 2.6中):python如何評估這個?
>>> 1<3>2
True
>>> (1<3)>2
False
>>> 1<(3>2)
False
我認爲,過去兩年中的一個將匹配第一個,但顯然在第一條語句的運營商以某種方式連接?
你的第一個例子顯示comparison chaining。 1<3>2
表示1<3 and 3>2
(除了每個表達式僅評估一次)。這適用於Python中的所有比較運算符。
你的第二個例子強迫一個比較首先被評估,產生一個布爾值,然後與剩餘的整數進行比較。
值得注意的是,如果比較值是表達式,那麼它們只會被評估一次,所以'1
的確如此。我編輯了我的答案以反映這一點。 – BrenBarn
在你第一種情況下1<3>2
1
實際上是較少比3
和3
比2
越大,所以True
。
在你的第二個案例(1<3)>2
(1<3)
評估爲True
被表示爲1
,所以1
不大於2
更大。
在您的第三種情況下,1<(3>2)
,1
不小於True
,表示爲1
。
最後兩個語句比較布爾針對整數
>>> True > 2
False
>>> 1 < True
False
第一條語句是comparison chaining,它適用於所有的Python布爾比較。文檔說明:
比較產生布爾值:True或False。
通過將部分表達式放在括號中,首先對這些部分進行評估,然後比較整數和布爾值。
作爲每docs,
不同於C,在Python所有比較操作具有相同的優先級,這比任何算術下,移位或按位操作。也不像C,像< b <表達式c具有即在數學常規的解釋:
比較:: = or_expr(comp_operator or_expr)*
comp_operator :: = 「<」 | 「>」| 「==」| 「> =」| 「< =」| 「<>」| 「!=」 | 「是」[「not」] | 「」不是「]」in「
比較產生布爾值:
True
或False
。比較可以任意鏈接,例如,,x < y < = z等於x < y和y < = z,不同之處在於y只評估一次(但在兩種情況下,當x < y被發現爲假時,根本不評估z)。
你能至少把你批量複製的python文檔文本放在引用中嗎? –
我已經添加了鏈接 –
這不是我的意思; shihongzhi爲你做了。 –
爲什麼downvote?我真的不知道要搜索什麼。 – monoceres