1
ispinfx 2020-03-07 10:56:26 +08:00 2
|
2
pabupa 2020-03-07 10:56:47 +08:00 via Android 1
没什么原因,语法糖。
a<b and b<c |
3
lsvih 2020-03-07 10:56:48 +08:00 1
'a'<'b'<'c' equal to 'a'<'b' and 'b'<'c'
|
4
yzlnew 2020-03-07 10:58:21 +08:00 3
('a'<'b')<'c' = True < 'c' -> TypeError
'a'<'b'<'c' = 'a'<'b' and 'b'<'c' = True and True = True |
5
masker 2020-03-07 10:59:16 +08:00 via Android
ASCII 码学过没
|
6
aguesuka 2020-03-07 10:59:27 +08:00
|
7
littlewing 2020-03-07 11:01:06 +08:00 1
'a'<'b'<'c' 在 py 中等价于 'a' < 'b' and 'b' < 'c',并不是 ('a' < 'b') < 'c'
|
8
glasswm OP 还是各位熟悉的姿势多。
补充问一下,这个在 python2 也适用吗? |
9
freakxx 2020-03-07 11:25:25 +08:00 1
https://github.com/satwikkansal/wtfpython
可以参看这个 ======== 另外,从类型角度来说, >>> isinstance(True, int) True 所以假如你比较 >>> 1 < True False 是可以的 |
11
Tomotoes 2020-03-07 11:39:27 +08:00
( 'a'<'b')<'c' 和 'a'<('b'<'c')
因为运算符的优先级, 先计算括号内的表达式, 然后将表达式的结果再做计算. 上例中, 表达式返回为 boolean 类型, 如果将其与 字符串类型比较, 肯定是报类型错误异常的. 而 'a'<'b'<'c' 是 py 的语法糖, 和楼上说的一样 'a'<'b'<'c' equal to 'a'<'b' and 'b'<'c' |
13
deplives 2020-03-07 12:32:35 +08:00
('a'<'b')<'c' 和 'a'<('b'<'c') 出错的原因是 ('a'<'b') 和 ('b'<'c') 的结果是 True 或者 False 是个 bool 类型,然后你拿 bool 类型和一个字符串比较, 那自然会 not supported between instances of 'bool' and 'str'
而 'a'<'b'<'c' 是因为 等于 'a'<'b' and 'b'<'c' |
14
Buges 2020-03-07 12:36:25 +08:00 via Android
这语法糖有意思,Python 果然优雅
|
15
loading 2020-03-07 12:37:22 +08:00 via Android
语法糖,先还原语法糖。
str 比较,ascii,得到两个 bool 类型,都是 true 最后两个 true,得出 true。 |
16
loading 2020-03-07 12:38:45 +08:00 via Android
如果加括号,就会变成一个 bool <'str'
两边的类型不同了。 语法糖我最讨厌了。 |
18
kidlj 2020-03-07 13:15:43 +08:00 via iPhone
这语法糖…感到不适
|
19
a719114136 2020-03-07 13:42:23 +08:00 via Android
怎么这么多人扯到语法糖,这和语法糖有啥关系。
a<b<c 这种语法从 c 开始就有了,只是有的语言不支持而已。 |
20
0ZXYDDu796nVCFxq 2020-03-07 14:02:48 +08:00
如果是 1 < a < 100 这种可以接受
'a'<'b'<'c' 这种字符串比较加语法糖真讨厌 |
21
wangyzj 2020-03-07 14:17:24 +08:00 via iPhone
ascii 和语法糖
|
22
lijialong1313 2020-03-07 14:53:25 +08:00
@a719114136 c 好像 a<b<c 是等价于(a<b)<c 的吧,那时候就有 a<b<c 等价于 a<b 且 b<c 了吗
|
23
zhpech 2020-03-07 14:55:48 +08:00
语法糖
|
24
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) |
25
ipwx 2020-03-07 15:17:15 +08:00 1
“凡是我常用语言没有的,别的语言有的,都是别的语言搞出来的语法糖,我都不喜欢。”
讲道理,非程序员看到这个语法可能觉得它非常自然。a < b < c 等价于 (a < b) < c 还要考虑 a<b 返回类型是个 bool,这才叫不自然呢。 |
26
ipwx 2020-03-07 15:18:34 +08:00
不信你们楼上的随便街上抓一个高中生,让他评判一下 0.1 < 0.2 < 0.3,是不是觉得挺自然的?在 C 里面这样写,怕不是报错就是 false。
|
27
hxse 2020-03-07 15:26:24 +08:00
因为实际上比较的是
ord('a') < ord('b') < ord('c') |
29
glasswm OP |
30
tairan2006 2020-03-08 09:34:16 +08:00 via Android
这不是 py2 就有的语法糖么
|