Python 条件判断问题

2021-02-21 12:07:03 +08:00
 YouMoeYi

起因是这样的, 我妈在家无事报了个免费的 Python 学习班, 现在学到条件判断了
然后就像很多新手一样数值范围的条件判断写成了 a <= x <= b 的形式,
然后我看到了就告诉我妈说是要写成 a <= x and x <= b 的形式,
但是她说写成 a <= x <= b 是对的
然后我不信就试了一下, 结果如下
Python 中
1 <= 4 <= 3 是 False
JavaScript 中
1 <= 4 <= 3 是 true
Python 的结果为什么是这样?
我个人的思路是这样的
运算符优先级相同, 比较运算符的结合性是从左往右,
然后 1 <= 4 结果为 True, 然后计算 True <= 3, 由于 True 就是 1, 1 <= 3 应该是 False 才对
PS: 我是写前端的没怎么写过 Python....

2896 次点击
所在节点    Python
23 条回复
Trim21
2021-02-21 12:08:33 +08:00
但是 python 就是支持这么写…而且也是在范围内比较的
Trim21
2021-02-21 12:09:01 +08:00
语言特性如此
jmc891205
2021-02-21 12:09:33 +08:00
python 的语法糖
a op b op c 等价于 a op b and b op c
McZoden
2021-02-21 12:09:56 +08:00
Python 的语法糖
deplives
2021-02-21 12:10:08 +08:00
语言支持
YouMoeYi
2021-02-21 12:10:27 +08:00
写错了 1 <= 3 应该是 True 才对 不知道为啥不能编辑了
renmu123
2021-02-21 12:11:23 +08:00
Python 这么写确实是可以了,这种写法只是 a<x&&x<b 的语法糖,具体为什么会这样我是没有深究过
YouMoeYi
2021-02-21 12:12:25 +08:00
@Trim21 懂了 我在网上没查到 谢谢了
silkriver
2021-02-21 12:31:22 +08:00
BingoXuan
2021-02-21 12:35:35 +08:00
>>> import dis
>>> dis.dis(lambda x: 1 <= x <= 3)
1 0 LOAD_CONST 1 (1)
2 LOAD_FAST 0 (x)
4 DUP_TOP
6 ROT_THREE
8 COMPARE_OP 1 (<=)
10 JUMP_IF_FALSE_OR_POP 18
12 LOAD_CONST 2 (3)
14 COMPARE_OP 1 (<=)
16 RETURN_VALUE
>> 18 ROT_TWO
20 POP_TOP
22 RETURN_VALUE

>>> dis.dis(lambda x: (1 <= x) <= 3)
1 0 LOAD_CONST 1 (1)
2 LOAD_FAST 0 (x)
4 COMPARE_OP 1 (<=)
6 LOAD_CONST 2 (3)
8 COMPARE_OP 1 (<=)
10 RETURN_VALUE


可能是繼承了 lisp 的特性的語法糖,不斷遞歸 x if compare other 解決的
zhidian
2021-02-21 12:37:30 +08:00
那你知道为啥 JavaScript 里 1 <= 4 <= 3 是 true 吗?。。。。。。
codists
2021-02-21 13:39:05 +08:00
Python 中的比较运算符连用和 JS 中的稍微有点不一样。
一、Python
1 <= 4 <= 3 等价于:1 <= 4 and 4 <= 3 。因为 1<=4 是 True,但是 4<=3 是 False,最后 True and False 的比较的结果是 False 。具体可以查看官方的 Python 语言参考手册: https://docs.python.org/3/reference/expressions.html#comparisons
2 、JS
1 <= 4 <= 3,1<=4 结果是 true,然后使用 Number()函数将 true 转为 1,接着 1<=3,所以结果为 true 。大佬是 JS 这方面的,我就不啰嗦了。
lithiumii
2021-02-21 14:02:40 +08:00
因为学过小学数学但没学过其他语言编程的普通人类都这样写,所以 py 设计成了这个样子,方便人类理解
lpts007
2021-02-21 14:51:24 +08:00
我想问一下为什么你妈要学 python
yaoppp
2021-02-21 15:25:24 +08:00
阿姨的 python 知识比我多
lizytalk
2021-02-21 15:28:12 +08:00
python 的语法糖而已
dinjufen
2021-02-21 15:32:03 +08:00
阿姨很好学嘛,我妈就爱打麻将🤣
freakxx
2021-02-21 15:32:14 +08:00
yangzzzzzzzt1
2021-02-21 16:06:40 +08:00
@lpts007 qs 别的不想问,只想问下为啥让家长学 python
susanzhou
2021-02-21 16:53:22 +08:00
不是一般的牛,不过程序主要是写给人看的,还是按标准写法写吧,对所有人都好

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

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

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

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

© 2021 V2EX