[問題] print(3>2 is True) >>>False ?

作者: liu2007 (è–¯)   2019-08-04 15:25:58
各位大大午安
我今天開始學python這個程式語言
看到範例
flag = 3 > 2
print(flag)
print(flag is True)
>>> True
>>> True
這邊沒問題
但是把flag這個變數拿掉直接寫
print(3>2 is True)
>>> False
本來我以為是型態的問題
print(2 is True)
>>> False
但是
print(type(3 > 2))
>>> <class 'bool'>
然後而我的Python版本是3.7的,應該也沒有所謂的改變True和False本身的值的問題
到底為什麼
print(3>2 is True)
>>> False
呢?
感謝各位的閱讀
作者: justoncetime (台北叢林好冷~)   2019-08-04 15:54:00
因為is先於> ,同階由左而右。python operator precedence
作者: tysh710320 (魯酸菌)   2019-08-04 16:10:00
print(2 is True) >>> False 原式變成print(3> False)又偏偏是True 而不是False 何解?
作者: justoncetime (台北叢林好冷~)   2019-08-04 16:11:00
前面由左而右,指同一階運算子同時出現時,位在左邊的運算子先處理。不是在式子出現同階時,由左而右g官方的Operator precedence吧原式3>2 is True依據precedence變成3>(2 is True)另外int(False)結果為0,所以最終結果就出來了。啊我懂二樓的疑問了抱歉 我剛看了原文,上面的解釋好像不對 Orz
作者: mikapauli (桜花)   2019-08-04 17:11:00
3 > 2 and 2 is True類似的有3 > 2 in {True}
作者: tysh710320 (魯酸菌)   2019-08-04 18:37:00
所以請問甚麼狀況下 要判斷多出一個and ?
作者: germun (ger)   2019-08-04 19:04:00
我猜3>2應該是個operation所以不是boolean 所以不是True你加個括號或運算後才會得到boolean是說寫這麼多年還真沒遇到這情況.....原po真厲害例如你用 (3<5) == 3<5 也會是False而((3<5) == 3)<5 跟 (3<5) == (3<5) 都是True總之想保險又避免混淆好閱讀 加括號就對了
作者: mikapauli (桜花)   2019-08-04 19:16:00
in, not in, is, is not, <, <=, >, >=, !=, ==這些結合時都是這樣為了讓0 < x < 1這種表達式符合直觀或是'a' in 'ab' in 'abc'這類
作者: germun (ger)   2019-08-04 19:36:00
懂樓上意思了 原來如此@@所以 3 > 2 == 2 就會是True, 因為是看成3 > 2 and 2 == 2

Links booklink

Contact Us: admin [ a t ] ucptt.com