Python中 a < b < c之類的語句到底是怎麼回事?

一開始以為是左右依次算。想想又覺得不對,因為如果這樣就變成了布爾值和最後一個值比較,明顯不符合實際情況。

實例:

```

&>&>&> -1 &< 0.5 &< 0.7

True

&>&>&> (-1 &< 0.5 )&< 0.7

# 這裡True &< 0.7,很自然的結果是False

False

&>&>&> 3 &< 4 &< 5

True

&>&>&> 3 &< (4 &< 5)

# 這裡3 &< True,很自然的結果也是False

False

```

所以這是固定用法???

去網上搜也不知道用什麼關鍵詞,搜出來的東西沒用......


沒有去找文檔,按照平時操作的經驗說一下

首先是描述中的舉例,False的原因不是因為布爾類型和整數、浮點數不能比較,而是True的值為1,False的值為0,導致數值比較錯誤:

&>&>&> -1 &< 0.5 &< 0.7 True &>&>&> (-1 &< 0.5 )&< 0.7 # 這裡相當於1 &< 0.7,很自然的結果是False False &>&>&> 3 &< 4 &< 5 True &>&>&> 3 &< (4 &< 5) # 這裡相當於3 &< 1,很自然的結果也是False False

再比如這樣看就一目了然:

&>&>&> True&<2 True &>&>&> False&&>&> (1&<2)&<3 True &>&>&> -1&<(0&<1) True

再說運算順序,我傾向於認為這是把連續比較拆分成若干個and,只要中間遇到一個False就中斷返回False:

&>&>&> 1&<3&>2
True
&>&>&> 1&<10&>2&<9&>3&<8&>4&<7&>5&<6 True

另外,知乎什麼時候支持Markdown,,


是不是把字元串自動解析成兩部分,3 &< 4 4 &< 5?


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

Comparisons can be chained arbitrarily, e.g., x &< y &<= z is equivalent to x &< y and y &<= z, except that y is evaluated only once (but in both cases z is not evaluated at all when x &< y is found to be false).

Formally, if a, b, c, …, y, z are expressions and op1, op2, …, opN are comparison operators, then a op1 bop2 c ... y opN z is equivalent to a op1 b and b op2 c and ... y opN z, except that each expression is evaluated at most once.

https://docs.python.org/3/library/stdtypes.html#truth-value-testing

Operations and built-in functions that have a Boolean result always return 0 or False for false and 1 or True for true, unless otherwise stated. (Important exception: the Boolean operations or and and always return one of their operands.)


高贊回答容易引起誤解,下面那位同學貼出的文檔是正確的。


推薦閱讀:

哪裡有免費的python3教程啊?最好是有例子的視頻教學
自學 Python 用記事本呢?還是有別的編輯器?
編程零基礎,如何學習Python?
如何高效自學編程()?

TAG:Python | 編程 | Python入門 |