C和Python三元运算符之间的区别

时间:2015-05-06 12:00:59

标签: python c ternary-operator

我刚读了一个SOF帖子,我看到很多人都在谈论Python的三元运算符。我不知道Python有一个三元运算符(三元运算符或条件表达式,无论你感到舒服),但它等效。所以Python三元运算符的语法是......

play_golf if sun_shines else stay_dumb

这里Python将在if之后测试块sun_shines。如果块返回true,它将执行块play_golf之前,否则Python将在其他之后执行块stay_dumb

另一方面,我认为C&C的三元运算符更具可读性。

sun_shines ? play_golf : stay_dumb

这就像问一个问题sun_shines?真正?好的,play_golf否则为stay_dumb

现在我的问题是......

  • Python在这里是Pythonic的吗? "简单比复杂更好"在我看来,这里失败了。如果我错了请澄清我。我想知道我错过了什么?
  • 我看到C和Python条件表达式的执行顺序完全不同。那它怎么相当于C?在将多个语句折叠成一个单独的表达式方面?

编辑:我想我得到了第二个问题的答案......

Python: true if true else false

C: true ? true : false

2 个答案:

答案 0 :(得分:3)

  

现在我的问题是......

     

Python如何更加Pythonic? "简单比复杂更好"在我看来,这里失败了。如果我错了请澄清我。我想要   知道我错过了什么吗?

英文句子是

如果天气好的话,我们去海边,否则我们待在家里

突出显示正确的字词,遗漏填充物:

gotobeach if weather == "nice" else stayathome

看起来很像有效的Python;)

  

我看到C和Python条件表达式的执行顺序完全不同。

没有。不是。

首先,解析该行,然后计算if之后的条件,然后评估其中一个语句。

答案 1 :(得分:1)

摘自定义条件表达式的PEP 308

  

许多C派生语言使用以下语法:

<condition> ? <expression1> : <expression2>
      Eric Raymond甚至实现了这一点。 BDFL拒绝了这一点   有几个原因:冒号已经在Python中有很多用途(甚至   虽然它实际上不会含糊不清,因为这个问题   mark需要匹配的冒号);对于不习惯C衍生的人   语言,很难理解。

在PEP中你可以找到决定的动机,我发现这些是合适的,但这只是个人意见。

解析顺序与C没有区别,正如@Marcus Muller所说。