分享文章《为什么 Python 、Go 和 Rust 都不支持三元运算符?》

2023-04-03 21:48:44 +08:00
 chinesehuazhou

避坑说明:

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

2151 次点击
所在节点    Python
10 条回复
ysw
2023-04-04 00:19:44 +08:00
感觉三元表达式就是太丑了,容易看错
kkocdko
2023-04-04 00:42:10 +08:00
其实如果使用得当就还好,但是现代编程语言通常都希望在语言设计层面避免瞎写,也不错啦
LeeReamond
2023-04-04 07:30:36 +08:00
三元表达式:还算是个人
嵌套三元表达式:地狱来客
hongzhangliu
2023-04-04 08:45:23 +08:00
看完了,写的挺清晰的。一个问题,<expression> if <condition> 这种方式,在什么情形下可用?直接在 ipython 里测试了一下,报语法错误
wliansheng
2023-04-04 10:57:41 +08:00
@hongzhangliu 文章里面写的很清楚 X if C else Y
acherkrau
2023-04-04 12:19:15 +08:00
刚在公众号看过,原来作者在 v2 也有帐号
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 )就是写起来长一点
chinesehuazhou
2023-04-04 14:32:28 +08:00
@hongzhangliu 刚试了确实不行,但我印象中是可以的。。。脑子混了
junkun
2023-04-05 20:07:36 +08:00
个人感觉是 C “带坏”了很多语言的设计,三元运算符的问题都是因为 if 块或者 Block 没有返回值。
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]

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

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

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

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

© 2021 V2EX