python if - else运算符优先级

时间:2015-01-20 18:20:15

标签: python

我遇到了一个非常讨厌的if-else运算符的例子,在python中代码看起来不错,但结果与预期完全不同。这是一个简短的版本:

print 1 + 4 if None else 3 # prints 3

查看Operator Precedence表似乎'if - else'几乎具有最低优先级。

'if - else'是否有什么特别的东西可以将'if'左侧的所有内容视为一个表达式?

4 个答案:

答案 0 :(得分:3)

嗯,None总是假的,所以你总是得到3。

如果您使用的是真值而不是1 + 4,那么

None就是结果:

1 + 4 if True else 3

给出5。

这完全是因为优先级低:它与

相同
(1 + 4) if ... else 3

因为 - 你知道 - if ... else的优先级低于+的优先级。

答案 1 :(得分:2)

区别在于顺序,而不是优先顺序。 Python中的if ... else运算符和c中的? ... :运算符都具有极低的优先级(低于+和{ {1}},无论如何)。

Python:-

c:result_if_true if conditional else result_if_false

考虑你的例子的顺序:

conditional ? result_if_true : result_if_false

与:

相同
print 1 + 4 if None else 3

将c转换为:

print (1 + 4) if (None) else (3)

其中cout << (0) ? (1 + 4) : (3); 被翻译为None,因为0在Python中是假的。

让你的c进入Python ...

None

转换为:

#include <iostream>
using namespace std;

int main() {
    int x = (1 + 0) ? (4) : (3);
    cout << x; // prints 4
    return 0;
}

答案 2 :(得分:0)

也许您正在寻找:

print 1 + (4 if None else 3)

打印4

答案 3 :(得分:0)

这是python中条件表达式的示例。

它将在IF和ELSE之间执行块

  1. 如果块返回非零或TRUE,则它将执行IF语句的左侧
  2. 如果块为零或FALSE或NONE,则它将执行ELSE语句的右侧

1 + 4(如果没有)3 在上面的行中,NONE威胁FALSE将返回,因此它将执行ELSE块的右侧3

请参见下面的代码以了解python中的条件表达式

a,b=10,1
v="A is less tahn B" if a < b else "A is greater than B"
print(v)

输出-> A大于B