X和Y或Z - 三元运算符

sho*_*qie 6 python syntax ternary-operator

在Java或C中,我们将<condition> ? X : Y其转换为Python X if <condition> else Y.

但也有这个小技巧:<condition> and X or Y.

虽然我明白,这是相当于前述三元运营商,我觉得很难把握如何andor运营商能够产生正确的结果.这背后的逻辑是什么?

awe*_*oon 8

虽然我知道它相当于前面提到的三元运算符

这是不正确的:

In [32]: True and 0 or 1
Out[32]: 1

In [33]: True and 2 or 1
Out[33]: 2
Run Code Online (Sandbox Code Playgroud)

为什么第一个表达式返回1(即Y),而条件是True和"预期"答案是0(即X)?

根据文件:

表达式x和y首先计算x; 如果x为false,则返回其值; 否则,将评估y并返回结果值.

表达式x或y首先评估x; 如果x为真,则返回其值; 否则,将评估y并返回结果值.

因此,True and 0 or 1计算and运算符的第一个参数,即True.然后它返回第二个参数,即0.

由于True and 0返回false值,or运算符返回第二个参数(即1)