避坑说明:
1.一句话回答:Python 在经过一番波折后,最后设计出了与众不同的条件表达式。Go 语言明确表示不支持三元运算符。Rust 先设计后舍去,主要的原因在于 if 表达式的语言基础。
2.文章主要梳理 PEP-308 内容,介绍 Python 引入条件表达式的过程:Python 没有设计三元运算符“?:”,主要是因为它不符合 Python 明确直观的设计风格。最后采用 X if C else Y 这种设计,主要的意图其实是消除“and-or”写法的隐患,这种设计简明易读,而且还有<expression> if <condition> 简化写法的妙用。
链接 1:出自个人博客,无需关注阅读 https://pythoncat.top/posts/2023-04-03-condition
链接 2: 来自公众号,如果你喜欢文章,请给个关注哈 https://mp.weixin.qq.com/s/YQ6MmefRPW7pNg3N1VAcTQ
1
ysw 2023-04-04 00:19:44 +08:00
感觉三元表达式就是太丑了,容易看错
|
2
kkocdko 2023-04-04 00:42:10 +08:00
其实如果使用得当就还好,但是现代编程语言通常都希望在语言设计层面避免瞎写,也不错啦
|
3
LeeReamond 2023-04-04 07:30:36 +08:00 6
三元表达式:还算是个人
嵌套三元表达式:地狱来客 |
4
hongzhangliu 2023-04-04 08:45:23 +08:00
看完了,写的挺清晰的。一个问题,<expression> if <condition> 这种方式,在什么情形下可用?直接在 ipython 里测试了一下,报语法错误
|
5
wliansheng 2023-04-04 10:57:41 +08:00
@hongzhangliu 文章里面写的很清楚 X if C else Y
|
6
acherkrau 2023-04-04 12:19:15 +08:00
刚在公众号看过,原来作者在 v2 也有帐号
|
7
dragondove 2023-04-04 13:59:05 +08:00
有三元运算符的语言在设计初期都没有 if/switch expression ,可读性和可维护性上应该是 switch expression 最好。
cond ? a : b 改为 switch(cond) { true -> a; false -> b; } (最好是 cond 里直接包含一个变量用 switch )就是写起来长一点 |
8
chinesehuazhou OP @hongzhangliu 刚试了确实不行,但我印象中是可以的。。。脑子混了
|
9
junkun 2023-04-05 20:07:36 +08:00
个人感觉是 C “带坏”了很多语言的设计,三元运算符的问题都是因为 if 块或者 Block 没有返回值。
|
10
whitewinds 2023-04-12 01:13:48 +08:00
@hongzhangliu 生成器和推导式里面可以只写 if ,当然 if 前面并不是一个 <expression>
(print(1) for i in range(10) if i % 2) [print(1) for i in range(10) if i % 2] |