2012-09-05 102 views
0

有人能解釋這些結果如何是可能的(Python 2.6中):python如何評估這個?

>>> 1<3>2 
True 
>>> (1<3)>2 
False 
>>> 1<(3>2) 
False 

我認爲,過去兩年中的一個將匹配第一個,但顯然在第一條語句的運營商以某種方式連接?

+0

爲什麼downvote?我真的不知道要搜索什麼。 – monoceres

回答

9

你的第一個例子顯示comparison chaining1<3>2表示1<3 and 3>2(除了每個表達式僅評估一次)。這適用於Python中的所有比較運算符。

你的第二個例子強迫一個比較首先被評估,產生一個布爾值,然後與剩餘的整數進行比較。

+2

值得注意的是,如果比較值是表達式,那麼它們只會被評估一次,所以'1

+0

的確如此。我編輯了我的答案以反映這一點。 – BrenBarn

4

在你第一種情況下1<3>21實際上是較少比332越大,所以True

在你的第二個案例(1<3)>2(1<3)評估爲True被表示爲1,所以1不大於2更大。

在您的第三種情況下,1<(3>2),1不小於True,表示爲1

2

最後兩個語句比較布爾針對整數

>>> True > 2 
False 
>>> 1 < True 
False 

第一條語句是comparison chaining,它適用於所有的Python布爾比較。文檔說明:

比較產生布爾值:True或False。

通過將部分表達式放在括號中,首先對這些部分進行評估,然後比較整數和布爾值。

1

作爲每docs

不同於C,在Python所有比較操作具有相同的優先級,這比任何算術下,移位或按位操作。也不像C,像< b <表達式c具有即在數學常規的解釋:

比較:: = or_expr(comp_operator or_expr)*

comp_operator :: = 「<」 | 「>」| 「==」| 「> =」| 「< =」| 「<>」| 「!=」 | 「是」[「not」] | 「」不是「]」in「

比較產生布爾值:TrueFalse

比較可以任意鏈接,例如,,x < y < = z等於x < y和y < = z,不同之處在於y只評估一次(但在兩種情況下,當x < y被發現爲假時,根本不評估z)。

+0

你能至少把你批量複製的python文檔文本放在引用中嗎? –

+0

我已經添加了鏈接 –

+1

這不是我的意思; shihongzhi爲你做了。 –