[ Python ] 1 != 0 > 0 为什么会是 false?

2018-05-28 10:49:25 +08:00
 ihaveadrame
如题,前两天有人问我这个题没答对。尴尬,查漏补缺吧。希望看到的大牛帮忙解惑~谷歌失败后,一脸正经的发帖。
5274 次点击
所在节点    Python
35 条回复
pabupa
2018-05-28 10:53:18 +08:00
>
(1 != 0) > 0
1 != (0 > 0)
pabupa
2018-05-28 10:54:40 +08:00
`(1 != 0) > 0 ` `1 != (0 > 0)`
pabupa
2018-05-28 10:55:04 +08:00
嘿~怎么都没格式呀
lianyue
2018-05-28 10:56:11 +08:00
运算符优先级
Kiriz
2018-05-28 10:57:08 +08:00
< <= > >= 优先于 != ==
littleylv
2018-05-28 11:01:41 +08:00
>>> print 1 != (0 > 0)
True
>>> print (1 != 0) > 0
True
>>> print 1 != 0 > 0
False
ihaveadrame
2018-05-28 11:05:23 +08:00
@pabupa 那按照你说的 结果不应该是 true 吗?
@lianyue @Kiriz 你用你理解的优先级 告诉我你的答案
@littleylv 这个运行的结果,所以才有了这个主题
chengluyu
2018-05-28 11:06:41 +08:00
搜的姿势不对,搜「 python chained comparision 」就可以搜到结果了:

> Comparisons can be chained arbitrarily, e.g., x < y <= z is equivalent to x < y and y <= z, except that y is evaluated only once (but in both cases z is not evaluated at all when x < y is found to be false).

摘自 https://docs.python.org/3/reference/expressions.html 的 6.10 Comparisions。
menc
2018-05-28 11:07:47 +08:00
看这个

ihaveadrame
2018-05-28 11:07:55 +08:00
@chengluyu 感谢~ (づ ̄ 3  ̄)づ
ihaveadrame
2018-05-28 11:10:37 +08:00
@menc 涨姿势~
jmc891205
2018-05-28 11:10:50 +08:00
这个应该等价于 1!=0 and 0>0
VYSE
2018-05-28 11:11:15 +08:00
这跟运算优先级没关系, PY 这点比较 tricky, 转换后实际是 1 != 0 and 0 > 0, 加括号后才当算数运算.
https://stackoverflow.com/questions/18528431/what-is-the-meaning-of-true-true-false-in-python-and-how-to-find-out
whoami9894
2018-05-28 11:11:21 +08:00
1 != 0 > 0
<=>
1 != 0 && 0 > 0
littleylv
2018-05-28 11:11:52 +08:00
@ihaveadrame #7 我那个是反驳 4 楼 5 楼的,没经实践就瞎说


@chengluyu #8 天呐还有这种特性?所以是:
>>> print 1 != 0 > 0
False
>>> print (1 != 0) and (0 > 0)
False
跪了
chengluyu
2018-05-28 11:16:13 +08:00
@littleylv 所以就可以写连等 a < b < c < d < e < f 了。
xxxy
2018-05-28 11:18:42 +08:00
https://docs.python.org/2/reference/expressions.html#comparisons

总结一下,就是链式比较的时候从左到右,一旦有一个为 false 就返回 false,剩下的不再执行
ihaveadrame
2018-05-28 11:20:00 +08:00
@all 这里我根据 @chengluyu 提供的信息 “ x<y<=z 当 优先级高的运算出现了 false,比较就会终止返回 false ” 。结合本题 1 != 0 > 0 这里 > 运算符优先级最高,因此 顺序排列后是 0 > 0 != 1 因为第一次比较就出现了 false,所以直接返回 false。
SuT2i
2018-05-28 11:23:58 +08:00
1 != 0 > 0 等价于 1!=0 and 0>0
yazoox
2018-05-28 11:34:13 +08:00
楼主,你是应届生么?还是社招?这个问题,问得实在是有点儿......

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/458283

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX