作者:
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
呢?
感謝各位的閱讀
因為is先於> ,同階由左而右。python operator precedence
print(2 is True) >>> False 原式變成print(3> False)又偏偏是True 而不是False 何解?
前面由左而右,指同一階運算子同時出現時,位在左邊的運算子先處理。不是在式子出現同階時,由左而右g官方的Operator precedence吧原式3>2 is True依據precedence變成3>(2 is True)另外int(False)結果為0,所以最終結果就出來了。啊我懂二樓的疑問了抱歉 我剛看了原文,上面的解釋好像不對 Orz
3 > 2 and 2 is True類似的有3 > 2 in {True}
作者:
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總之想保險又避免混淆好閱讀 加括號就對了
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