[问题] 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