作者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/cn.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