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