为什么我在python中尝试过以下逻辑操作的输出不同?
-1 or 1
1 or -1
首先返回-1
,然后返回1
答案 0 :(得分:8)
and
和or
都是 lazy ;他们评估操作数直到他们可以决定结果(and
在第一个False
操作数处停止; or
在第一个True
操作数处停止。它们返回评估的最后一个操作数,如the documentation中所述:
请注意,
and
和or
都不会限制它们返回False
和True
的值和类型,而是返回最后一个已计算的参数。这有时很有用,例如,如果s
是一个字符串,如果它是空的,则应该用默认值替换,表达式s or 'foo'
会产生所需的值。
答案 1 :(得分:7)
表达式
x or y
首先评估x
;如果x
为真,则返回其值;否则,将评估y
并返回结果值。
答案 2 :(得分:3)
第一部分-1
和1
都会被评估为True
,因此会返回。第二部分被忽略了。
答案 3 :(得分:3)
or
运算符短路。它返回布尔上下文中的第一个值True
,否则返回最后一个计算的表达式。 -1
和1
都是布尔上下文中的True
,因此您获得第一个数字。
0
,None
和所有空容器的评估结果为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)