1
glacer 2019-01-15 12:00:58 +08:00
这样写如果是 -1<0<1 那就应该是 false 了吧
|
2
KevinBu 2019-01-15 12:01:24 +08:00
Pycharm 的提示功能很强大😄
|
3
hangvane 2019-01-15 12:17:10 +08:00 via iPhone
|
4
AvenirX 2019-01-15 12:20:43 +08:00
a<b<c 在 python 等同于 a<b and b<c, 而不是 (a<b)<c.
看: https://docs.python.org/3/reference/expressions.html#comparisons Also unlike C, expressions like a < b < c have the interpretation that is conventional in mathematics. 不同于 C 语言, a<b<c 会被理解为数学公式写法的意思. |
6
aijam 2019-01-15 12:20:58 +08:00
Comparisons can be chained arbitrarily, e.g., x < y <= z is equivalent to x < y and y <= z
https://docs.python.org/3.7/reference/expressions.html#comparisons |
7
013231 2019-01-15 12:22:31 +08:00
https://docs.python.org/3/reference/expressions.html#comparisons
為什麼不讀文檔呢? Comparisons can be chained arbitrarily, e.g., x < y <= z is equivalent to x < y and y <= z, except that y is evaluated only once (but in both cases z is not evaluated at all when x < y is found to be false). Formally, if a, b, c, …, y, z are expressions and op1, op2, …, opN are comparison operators, then a op1 b op2 c ... y opN z is equivalent to a op1 b and b op2 c and ... y opN z, except that each expression is evaluated at most once. |
8
jmc891205 2019-01-15 12:24:32 +08:00
额 很常写啊 很好用的语法糖
|
9
loading 2019-01-15 12:26:11 +08:00 via Android 4
不会,我只会写那种傻子都能看懂的,因为我过几天看我的代码就想看智障的一样。
|
10
sikariba 2019-01-15 12:32:48 +08:00
我也常写
|
11
bikingtarzan 2019-01-15 12:38:23 +08:00
不会,就用普通的格式,不然之后看代码,就在这里卡一下 , = =
|
12
goodryb 2019-01-15 12:42:42 +08:00
为啥不好好写成 a < b and b < c,代码不是约简单越好吗,除非性能上有很大差距
|
13
lithiumii 2019-01-15 12:52:04 +08:00
@goodryb 对普通人来说,难道不是连起来写更简单吗? a < b and b < c 只是对别的语言的程序写多了的人来说简单吧。
|
14
zhy 2019-01-15 12:55:52 +08:00
前两天刚遇到这种提示,当然这种方式更直观
|
16
BBCCBB 2019-01-15 12:56:55 +08:00
python 里是可以直接写成 a<b<c 这种形式的, 楼上也说了, 和 a<b and b<c 一样的
|
18
xieranmaya 2019-01-15 13:01:55 +08:00 via Android
这明明是 python 的标准语法,这个语法给我的映像也很深
不过如果是我,我不会写,我怕把这习惯带到其它语言里面去了 |
20
vexplain OP |
21
pimin 2019-01-15 13:26:09 +08:00
我写的话肯定会写 a<b&&b<c
|
22
busfool 2019-01-15 13:36:56 +08:00 via Android
可以 可以这样写
|
23
chengxiao 2019-01-15 13:38:05 +08:00
不会 我想将来回来看的时候回产生一些不必要的误解
最近经常几个语言来回混写 有些语法在另一个语言中就成另一种意思了 搞着搞着就发现尽量语义化的必要性了 |
24
youthfire 2019-01-15 13:43:46 +08:00 via iPhone
我很在意 pycharm 的啰嗦,会修改到他满意,强迫症…
|
25
imn1 2019-01-15 13:46:13 +08:00
经常
还经常写 a=b=c=0 这种赋值 以前研究为何 python 没有 between()函数时,就知道 min<v<max 这种写法了 |
26
richzhu 2019-01-15 13:56:20 +08:00
😂我是菜逼。。。一直都这么写...
if a >> b > c: pass: else: pass |
27
SeaRecluse 2019-01-15 14:18:40 +08:00
a < b and b < c 与 a < b < c 并不完全等价吧,可能有潜在风险,但是如果只是大小判断的话似乎没什么问题,但是我还是选择第一种写法
|
28
baicheng10 2019-01-15 14:44:04 +08:00
@lithiumii 之前有人在群里问过同样的问题,一群人理解的都是类似 a < (b < c) => a < true => true。没人发现其实是初中就会的自然语言的逻辑。 可能没学过计算机语言的人更好理解一些,有语言基础的反而容易被误导吧。哈哈
|
29
rust 2019-01-15 14:44:41 +08:00
@SeaRecluse 求解有哪些潜在风险
|
30
edigar 2019-01-15 15:13:25 +08:00
那么问题来了
if 1 < 2 is True: print('Yes!') else: print('No!') yes or no ? |
32
sazima 2019-01-15 15:34:11 +08:00
print(1<2<3<4<5>2 ) ?
|
34
cissoid 2019-01-15 15:55:20 +08:00
|
35
xpresslink 2019-01-15 16:06:47 +08:00
@SeaRecluse 别扯了,a < b < c 只是 a < b and b < c 的语法糖
|
37
SeaRecluse 2019-01-15 17:28:49 +08:00
@rust 任何一个比较都是限定在一个参考系或者标准下的,所以 a<b,b<c 推出 a<b<c 的前提的他们各自处于同一标准环境下且不相互影响。一个简单的例子,def funtion tmp(class A,class B) ,对于 AB 的交集属性,如果 A 均小 B,则 A < B True,反之 False 给出以下:
A{ x = 1 y = 2 z = 3 }; B{ x = 2 y = 3 }; C{ x = 3 y = 4 z = 1 } tmp(A,B) 得出 A < B True tmp(B,C) 得出 B < C True tmp(A,C) 得出 A < C False A < B and B < C True A < B < C False |
38
SeaRecluse 2019-01-15 17:29:55 +08:00
@xpresslink 因为 a<b,b< c 所以 a< b <c,你数学老师没教过你这样推论的前提条件吗
|
39
xxgirl2 2019-01-15 18:12:59 +08:00
写 C 写多了这种有点特别的东西不太敢碰。能看懂是首要的,语法用得傻白甜也无妨。
|
40
UnitTest 2019-01-15 18:15:49 +08:00
@SeaRecluse 这个还有前提条件?
|
41
SeaRecluse 2019-01-15 18:28:59 +08:00
@UnitTest 动态语言带来的弊端,a,b,c 相互比较的属性不一定等价
|
42
bestkayle 2019-01-15 18:43:37 +08:00 via iPhone
py 写完基本要修个几百遍才行
|
43
xpresslink 2019-01-15 19:09:34 +08:00 2
@SeaRecluse
talk is cheap, show me the python code, for any case, a < b and b < c is True, but a < b <c is False. don't use operator overloading. |
44
xi2008wang 2019-01-15 19:14:14 +08:00
>>> import ast
>>> ast.dump(ast.parse('-1 < 0')) 'Module(body=[Expr(value=Compare(left=Num(n=-1), ops=[Lt()], comparators=[Num(n=0)]))])' >>> ast.dump(ast.parse('-1 < 0 < 1')) 'Module(body=[Expr(value=Compare(left=Num(n=-1), ops=[Lt(), Lt()], comparators=[Num(n=0), Num(n=1)]))])' 看来 python 对于 链式比较 Compare 维护了 ops 列表,comparatorszhi 列表 |
45
ytmsdy 2019-01-15 20:27:22 +08:00
花式语法还是算了吧。过几个月以后,你自己回去看,都看不懂
|
46
lshang 2019-01-16 02:03:33 +08:00 1
经常用,写 Python 不写 Pythonic 的代码岂不是太无趣了
|
47
Xs0ul 2019-01-16 04:16:11 +08:00
|
48
RangerWolf 2019-01-16 09:01:05 +08:00
也是最近发发现有 a<b<c 这种写法。。。
也同样是 Java 转过来的。。。 但是感觉依然不会连写吧。。。 |
49
vipppppp 2019-01-16 09:34:56 +08:00
看了一下上面的评论
排除从 pycharm 等 ide 复制过来的, 能写出 a < b < c 的朋友基本是知道这个的含义,而不明白的大部分都是写 a<b<c 学一门语言怎么样都读一下文档吧。。随意就吐槽很奇怪。。 |
50
xpresslink 2019-01-16 09:45:05 +08:00
@Xs0ul 这个式子和传递性屁关系没有,只是纯粹的语法糖,解释器直接转换成 a < b and b < c, 并且不保证 a < c, 这此官方文档上写得清清楚楚的。程序语言只是借用数学符号,表达式并不能和数学公式定理等价。有些人不懂装懂非要把简单明确的事搞复杂了。
|
51
Xs0ul 2019-01-16 10:28:38 +08:00
@xpresslink #50 那你也得看我回复的是谁
|
52
hjq98765 2019-01-16 10:40:20 +08:00
我都是 a<b<c 这么写
(a<b)<c 才是 c 语言的意思 |
53
wawehi 2019-01-16 11:53:07 +08:00
其实这样写可读性是不错的,最怕 lambada + filter + map 这种的,一头雾水,得看很久才明白怎么回事
|
54
jkhere 2019-01-17 09:32:33 +08:00
生产代码还是少用一些语法糖之类的,代码简单易懂最重要。过一段时间即使自己看自己的代码都会懵逼,更别说给别人看和修改了。
|