作者liu2007 (薯)
看板Python
標題[問題] print(3>2 is True) >>>False ?
時間Sun Aug 4 15:25:58 2019
各位大大午安
我今天開始學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://webptt.com/m.aspx?n=bbs/Python/M.1564903562.A.2FE.html
1F:→ justoncetime: 因為is先於> ,同階由左而右。 08/04 15:54
2F:→ justoncetime: python operator precedence 08/04 15:55
3F:→ tysh710320: print(2 is True) >>> False 原式變成print(3> False) 08/04 16:10
4F:→ tysh710320: 又偏偏是True 而不是False 何解? 08/04 16:11
5F:→ justoncetime: 前面由左而右,指同一階運算子同時出現時,位在左邊的 08/04 16:11
6F:→ justoncetime: 運算子先處理。不是在式子出現同階時,由左而右 08/04 16:12
7F:→ justoncetime: g官方的Operator precedence吧 08/04 16:14
8F:→ justoncetime: 原式3>2 is True依據precedence變成3>(2 is True) 08/04 16:26
9F:→ justoncetime: 另外int(False)結果為0,所以最終結果就出來了。 08/04 16:34
10F:→ justoncetime: 啊我懂二樓的疑問了 08/04 16:37
11F:→ justoncetime: 抱歉 我剛看了原文,上面的解釋好像不對 Orz 08/04 16:52
12F:→ mikapauli: 3 > 2 and 2 is True 08/04 17:11
13F:→ mikapauli: 類似的有3 > 2 in {True} 08/04 17:12
14F:→ tysh710320: 所以請問甚麼狀況下 要判斷多出一個and ? 08/04 18:37
15F:推 germun: 我猜3>2應該是個operation所以不是boolean 所以不是True 08/04 19:04
16F:→ germun: 你加個括號或運算後才會得到boolean 08/04 19:04
17F:→ germun: 是說寫這麼多年還真沒遇到這情況.....原po真厲害 08/04 19:05
18F:→ germun: 例如你用 (3<5) == 3<5 也會是False 08/04 19:09
19F:→ germun: 而((3<5) == 3)<5 跟 (3<5) == (3<5) 都是True 08/04 19:09
20F:→ germun: 總之想保險又避免混淆好閱讀 加括號就對了 08/04 19:10
21F:→ mikapauli: in, not in, is, is not, <, <=, >, >=, !=, == 08/04 19:16
22F:→ mikapauli: 這些結合時都是這樣 08/04 19:17
23F:→ mikapauli: 為了讓0 < x < 1這種表達式符合直觀 08/04 19:18
24F:→ mikapauli: 或是'a' in 'ab' in 'abc'這類 08/04 19:20
25F:推 germun: 懂樓上意思了 原來如此@@ 08/04 19:36
26F:→ germun: 所以 3 > 2 == 2 就會是True, 因為是看成3 > 2 and 2 == 2 08/04 19:38