我遇到了一个非常讨厌的if-else运算符的例子,在python中代码看起来不错,但结果与预期完全不同。这是一个简短的版本:
print 1 + 4 if None else 3 # prints 3
查看Operator Precedence表似乎'if - else'几乎具有最低优先级。
'if - else'是否有什么特别的东西可以将'if'左侧的所有内容视为一个表达式?
答案 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 + 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)