看板 Python 關於我們 聯絡資訊
各位大大午安 我今天開始學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 呢? 感謝各位的閱讀 -- If a child on the street who has nothing is willing to share, why are we who have everything still so greedy? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.192.227.117 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1564903562.A.2FE.html
justoncetime: 因為is先於> ,同階由左而右。 08/04 15:54
justoncetime: python operator precedence 08/04 15:55
tysh710320: print(2 is True) >>> False 原式變成print(3> False) 08/04 16:10
tysh710320: 又偏偏是True 而不是False 何解? 08/04 16:11
justoncetime: 前面由左而右,指同一階運算子同時出現時,位在左邊的 08/04 16:11
justoncetime: 運算子先處理。不是在式子出現同階時,由左而右 08/04 16:12
justoncetime: g官方的Operator precedence吧 08/04 16:14
justoncetime: 原式3>2 is True依據precedence變成3>(2 is True) 08/04 16:26
justoncetime: 另外int(False)結果為0,所以最終結果就出來了。 08/04 16:34
justoncetime: 啊我懂二樓的疑問了 08/04 16:37
justoncetime: 抱歉 我剛看了原文,上面的解釋好像不對 Orz 08/04 16:52
mikapauli: 3 > 2 and 2 is True 08/04 17:11
mikapauli: 類似的有3 > 2 in {True} 08/04 17:12
tysh710320: 所以請問甚麼狀況下 要判斷多出一個and ? 08/04 18:37
germun: 我猜3>2應該是個operation所以不是boolean 所以不是True 08/04 19:04
germun: 你加個括號或運算後才會得到boolean 08/04 19:04
germun: 是說寫這麼多年還真沒遇到這情況.....原po真厲害 08/04 19:05
germun: 例如你用 (3<5) == 3<5 也會是False 08/04 19:09
germun: 而((3<5) == 3)<5 跟 (3<5) == (3<5) 都是True 08/04 19:09
germun: 總之想保險又避免混淆好閱讀 加括號就對了 08/04 19:10
mikapauli: in, not in, is, is not, <, <=, >, >=, !=, == 08/04 19:16
mikapauli: 這些結合時都是這樣 08/04 19:17
mikapauli: 為了讓0 < x < 1這種表達式符合直觀 08/04 19:18
mikapauli: 或是'a' in 'ab' in 'abc'這類 08/04 19:20
germun: 懂樓上意思了 原來如此@@ 08/04 19:36
germun: 所以 3 > 2 == 2 就會是True, 因為是看成3 > 2 and 2 == 2 08/04 19:38