为什么我在Python中尝试的逻辑运算输出不同?
-1 or 1
1 or -1
第一个返回 -1
,第二个返回 1
-1 or 1
1 or -1
第一个返回 -1
,第二个返回 1
and
和or
都是“懒惰”的;它们评估操作数,直到它们可以确定结果(and
在第一个False
操作数处停止;or
在第一个True
操作数处停止)。正如文档中所述,它们返回最后评估的操作数:
请注意,
and
和or
都不限制它们返回的值和类型为False
和True
,而是返回最后评估的参数。这有时很有用,例如,如果s
是应该在为空时替换为默认值的字符串,则表达式s or 'foo'
会产生所需的值。
or
运算符可以短路,它返回在布尔上下文中第一个为 True
的值,否则返回最后计算的表达式。在布尔上下文中,-1
和 1
都是 True
,因此你会得到第一个数字。0
、None
和所有空容器都被视为 False
。>>> 0 or 5
5
>>> '' or []
[]
首先,第一部分-1
和1
都被评估为True
并返回。第二部分被忽略。
在 或
条件中,如果第一个条件为真,则不会评估第二个条件,
我认为OP期望'or'的返回值为True或False(这在其他一些语言的布尔运算符中是成立的)。
像Perl一样,Python只是返回第一个“真”值(其中“真”表示数字非零,字符串非空,不是None等)
同样,如果两个值都是“真”,则'and'仅返回最后一个值。
他可能会对类似以下代码的结果感到更惊讶
{'x':1} or [1,2,3]
open(FILE, "foo.txt") || die
; 我不知道这在Python中是否常见。(参见man)