请教,为什么 'a'<'b'<'c' 在 python3 中也返回 True?

2020-03-07 10:52:29 +08:00
 glasswm
python3 中一般不同类型的比较会返回 exception

比如( 'a'<'b')<'c' 和 'a'<('b'<'c') 都会返回 TypeError: '<' not supported between instances of 'bool' and 'str'

但 'a'<'b'<'c' 返回了 True,这是什么原因呢?
5058 次点击
所在节点    Python
30 条回复
wangyzj
2020-03-07 14:17:24 +08:00
ascii 和语法糖
lijialong1313
2020-03-07 14:53:25 +08:00
@a719114136 c 好像 a<b<c 是等价于(a<b)<c 的吧,那时候就有 a<b<c 等价于 a<b 且 b<c 了吗
zhpech
2020-03-07 14:55:48 +08:00
语法糖
NeinChn
2020-03-07 15:16:44 +08:00
@gstqc
C 没有这种语法,只是写起来后根据运算规则顺次运算,比如 3<4<2 在 C 里面是 true,跑的是( 3<4)<2 = 1 < 2 = true
在 python 里面是 false,因为是( 3<4) && (4<2)
ipwx
2020-03-07 15:17:15 +08:00
“凡是我常用语言没有的,别的语言有的,都是别的语言搞出来的语法糖,我都不喜欢。”

讲道理,非程序员看到这个语法可能觉得它非常自然。a < b < c 等价于 (a < b) < c 还要考虑 a<b 返回类型是个 bool,这才叫不自然呢。
ipwx
2020-03-07 15:18:34 +08:00
不信你们楼上的随便街上抓一个高中生,让他评判一下 0.1 < 0.2 < 0.3,是不是觉得挺自然的?在 C 里面这样写,怕不是报错就是 false。
hxse
2020-03-07 15:26:24 +08:00
因为实际上比较的是
ord('a') < ord('b') < ord('c')
junkun
2020-03-07 17:28:19 +08:00
@glasswm 适用。这个语法糖是很早就有的,但我也不知道是哪个版本开始的,至少 2.7 是有的。
glasswm
2020-03-07 22:10:43 +08:00
@junkun 我也测试确认了下,的确如此。

2.7 中
0.5<0.8<0.9 -> True
(0.5<0.8)<0.9 -> False
tairan2006
2020-03-08 09:34:16 +08:00
这不是 py2 就有的语法糖么

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

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

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

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

© 2021 V2EX