使用-1的逻辑OR运算

时间:2013-02-14 08:14:19

标签: python python-2.7 logical-operators

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

-1 or 1
 1 or -1

首先返回-1,然后返回1

6 个答案:

答案 0 :(得分:8)

andor都是 lazy ;他们评估操作数直到他们可以决定结果(and在第一个False操作数处停止; or在第一个True操作数处停止。它们返回评估的最后一个操作数,如the documentation中所述:

  

请注意,andor都不会限制它们返回FalseTrue的值和类型,而是返回最后一个已计算的参数。这有时很有用,例如,如果s是一个字符串,如果它是空的,则应该用默认值替换,表达式s or 'foo'会产生所需的值。

答案 1 :(得分:7)

阅读the documentation

  

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

答案 2 :(得分:3)

第一部分-11都会被评估为True,因此会返回。第二部分被忽略了。

答案 3 :(得分:3)

or运算符短路。它返回布尔上下文中的第一个值True,否则返回最后一个计算的表达式。 -11都是布尔上下文中的True,因此您获得第一个数字。

0None和所有空容器的评估结果为False

例如:

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

答案 4 :(得分:3)

or条件下,如果第一个条件为真,则不评估第二个,

答案 5 :(得分:0)

我认为OP期望'或'的返回值为True或False(就像其他语言中的布尔运算符一样)。

Python与Perl一样,只返回第一个“true”值(其中“true”表示数字非零,非字符串表示非空,等等。)

同样,'和'返回最后一个值,当且仅当两者都是“真”时。

他可能会对

之类的结果感到更惊讶
{'x':1} or [1,2,3]

Perl程序员经常以惯用方式使用此构造(如open(FILE, "foo.txt") || die中所述;我不知道这在Python中是否常见。

(见man