起因是这样的, 我妈在家无事报了个免费的 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....
1
Trim21 2021-02-21 12:08:33 +08:00 via Android
但是 python 就是支持这么写…而且也是在范围内比较的
|
2
Trim21 2021-02-21 12:09:01 +08:00 via Android
语言特性如此
|
3
jmc891205 2021-02-21 12:09:33 +08:00 via iPhone
python 的语法糖
a op b op c 等价于 a op b and b op c |
4
McZoden 2021-02-21 12:09:56 +08:00
Python 的语法糖
|
5
deplives 2021-02-21 12:10:08 +08:00 via iPhone
语言支持
|
6
YouMoeYi OP 写错了 1 <= 3 应该是 True 才对 不知道为啥不能编辑了
|
7
renmu123 2021-02-21 12:11:23 +08:00 via Android
Python 这么写确实是可以了,这种写法只是 a<x&&x<b 的语法糖,具体为什么会这样我是没有深究过
|
9
silkriver 2021-02-21 12:31:22 +08:00
|
10
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 解決的 |
11
zhidian 2021-02-21 12:37:30 +08:00
那你知道为啥 JavaScript 里 1 <= 4 <= 3 是 true 吗?。。。。。。
|
12
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 这方面的,我就不啰嗦了。 |
13
lithiumii 2021-02-21 14:02:40 +08:00 via Android
因为学过小学数学但没学过其他语言编程的普通人类都这样写,所以 py 设计成了这个样子,方便人类理解
|
14
lpts007 2021-02-21 14:51:24 +08:00 via Android 4
我想问一下为什么你妈要学 python
|
15
yaoppp 2021-02-21 15:25:24 +08:00 via iPhone 1
阿姨的 python 知识比我多
|
16
lizytalk 2021-02-21 15:28:12 +08:00 via iPhone
python 的语法糖而已
|
17
dinjufen 2021-02-21 15:32:03 +08:00
阿姨很好学嘛,我妈就爱打麻将🤣
|
18
freakxx 2021-02-21 15:32:14 +08:00
|
19
yangzzzzzzzt1 2021-02-21 16:06:40 +08:00
@lpts007 qs 别的不想问,只想问下为啥让家长学 python
|
20
susanzhou 2021-02-21 16:53:22 +08:00 via Android
不是一般的牛,不过程序主要是写给人看的,还是按标准写法写吧,对所有人都好
|
21
stephenyin 2021-02-21 22:00:38 +08:00
就一句:你妈牛逼
|
22
Zy143L 2021-02-22 00:00:55 +08:00 via Android
您母亲被 Python 培训洗脑了?😅
开始卷起来打算抢你饭碗 |