为什么python中的三元运算符是否为else而不是其他呢?

时间:2014-04-30 12:20:05

标签: python if-statement history ternary

这样的代码看起来很奇怪,

x = 1 if condition else 5

大多数程序员习惯使用模式<condition><on-true><on-false>。为什么python以其三元运算符打破这个众所周知的已建立的模式?为什么不这样:

x = if condition then 1 else 5

这种设计决定是否有原因?

2 个答案:

答案 0 :(得分:4)

Python更像英语,所以它应该像这样阅读

one, if condition is Truthy, else 5

documentation

中详细了解相关信息

另外,请阅读由BDFL自己撰写的PEP 308

引自BDFL's pronouncement mail

  

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

     

语法将是

A if C else B
     

首先评估C;如果是真的,则评估A给出   结果,否则,评估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
     

请注意,所有这些都是故意丑陋的。 :)

     

一般来说,&#39;如果&#39;和&#39;其他&#39;绑定不如除了之外的所有东西   拉姆达。

     

我们将调整内容的语法,如果&#39;不允许   拉姆达;目前

if lambda: x:
     

被接受但很无用(它总是如此)所以这将是   禁止。

     

火焰,请求重新考虑等等,/ dev / null。

     

恭喜你接受了。

     

它还是我的语言! : - )

答案 1 :(得分:1)

原因可归纳为,因为Guido said so

  

语法将是

   A if C else B
     

[...]

     

火焰,请求重新考虑等等,/ dev / null。

     

恭喜你接受了。

     

它还是我的语言! : - )

他削减了Gordian knot that is PEP 308;每个变种都有他们的支持者和批评者,以及他在这里挑选的it was his personal preference

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

就个人而言,我同意这个选择,顺便说一句。我喜欢语法。