起因是这样的, 我妈在家无事报了个免费的 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 ![]() 我想问一下为什么你妈要学 python |
![]() | 15 yaoppp 2021-02-21 15:25:24 +08:00 via iPhone ![]() 阿姨的 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 metamask 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 培训洗脑了? 开始卷起来打算抢你饭碗 |