2013-02-14 70 views
3

为什么输出与我在python中尝试的以下逻辑操作不同?逻辑或操作-1

-1 or 1 
1 or -1 

首先返回-1和第二返回1

回答

8

andor均为懒惰;他们评估操作数,直到他们可以决定结果(and停止在第一个False操作数; or停止在第一个True操作数)。他们返回计算的最后一个操作数,如the documentation注意:

注意,无论是and也不or限制值并键入他们回到FalseTrue,而是返回最后一个变量。这有时是有用的,例如,如果s是一个字符串,如果该字符串为空,则应该使用默认值替换,则表达式s or 'foo'会生成所需的值。

3

两个第一部件-11被评估True并因此返回。第二部分被忽略。

3

or运营商短路。它在布尔上下文中返回第一个值True,否则返回上一个求值的表达式。 -11都是在布尔上下文中的True,所以你得到第一个数字。

0,None并且所有空容器评估为False

例如:

>>> 0 or 5 
5 
>>> '' or [] 
[] 
3

or条件如果第一条件是真,第二不评估,

7

the documentation

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

0

我认为OP希望“或”是True或False(如将在其他一些语言布尔运算符的情况下)。

的Python,如Perl,只是返回的返回值第一个“真”值(其中“真”表示数字非零,字符串非空,非空等)

同样,'and'返回最后一个值当且仅当两者都为“true” 。

他很可能是由像

{'x':1} or [1,2,3] 
结果更惊讶

Perl程序员经常惯用使用此结构(如open(FILE, "foo.txt") || die;我不知道这是在Python作为共同

(见man