为什么Python的三元运算符是if else而不是if then else?
这样的代码看起来有点奇怪,
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吧。
感谢大家的祝贺。
这仍然是我的语言!:-)