为什么Python的三元运算符是if else而不是if then else?

1 投票
2 回答
2214 浏览
提问于 2025-04-18 04:52

这样的代码看起来有点奇怪,

x = 1 if condition else 5

大多数程序员习惯于使用这种格式:<条件> : <条件为真时执行的代码> : <条件为假时执行的代码>。为什么Python的三元运算符会打破这个大家都熟悉的模式呢?为什么不使用类似这样的格式呢:

x = if condition then 1 else 5

这样设计的背后有什么原因吗?

2 个回答

1

这个原因可以简单总结为因为Guido这么说的

语法将会是

   A if C else B

[...]

对那些反对的声音、请求重新考虑的意见等等,统统丢到/dev/null里去。

祝贺的接受方式很优雅。

这仍然是我的语言!:-)

他解决了PEP 308这个复杂的问题; 每种变体都有支持者和反对者,而这是他个人的偏好,所以他选择了这个。

Python不是C语言,它是Python,是Guido的Python。

顺便说一下,我个人也同意这个选择。我喜欢这个语法。

4

Python的语法更像英语,所以应该这样来理解。

one, if condition is Truthy, else 5

想了解更多,可以查看文档

另外,可以看看这篇PEP 308,是由BDFL本人写的。

引用自BDFL的邮件声明

经过长时间的讨论,我决定在Python 2.5中添加一个快捷的条件表达式。

它的语法将是

A if C else B

这个表达式首先会计算C;如果C为真,就会计算A并返回结果;如果C为假,则会计算B并返回结果。

优先级设置为,你可以这样写

x = A if C else B
x = lambda: A if C else B
x = A if C else B if D else E

但你必须这样写

if (A if C else B):
[x for x in seq if (A if C else B)]
A if (X if C else Y) else B
(A if C else B) if D else E

注意,这些写法故意看起来不太好。:)

一般来说,'if'和'else'的优先级比除了lambda以外的所有东西都要低。

我们会调整'if'里面的语法,不允许使用lambda;目前

if lambda: x:

是被接受的,但其实没什么用(它总是返回真),所以将不再允许。

对于批评、请求重新考虑等,直接扔到/dev/null吧。

感谢大家的祝贺。

这仍然是我的语言!:-)

撰写回答