3

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

-1 or 1
 1 or -1

第一次退货-1和第二次退货1

4

6 回答 6

8

and并且or都很懒惰;他们评估操作数,直到他们可以决定结果(and在第一个操作数处停止Falseor在第一个True操作数处停止)。它们返回评估的最后一个操作数,如文档中所述

请注意,既不限制and也不or限制它们返回的值和类型FalseTrue而是返回最后评估的参数。这有时很有用,例如,如果s字符串为空,则应将其替换为默认值,则表达式会s or 'foo'产生所需的值。

于 2013-02-14T08:16:00.970 回答
7

阅读文档

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

于 2013-02-14T08:16:05.647 回答
3

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

于 2013-02-14T08:15:18.987 回答
3

or操作员短路。它返回True布尔上下文中的第一个值,否则返回最后一个计算的表达式。-1并且1True在布尔上下文中,所以你得到第一个数字。

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

例如:

>>> 0 or 5
5
>>> '' or []
[]
于 2013-02-14T08:15:55.533 回答
3

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

于 2013-02-14T08:16:03.623 回答
0

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

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

类似地,当且仅当两者都为“真”时,'and' 返回最后一个值。

他可能会对类似的结果感到更加惊讶

{'x':1} or [1,2,3]

Perl 程序员经常习惯性地使用这种结构(如open(FILE, "foo.txt") || die; 我不知道这在 Python 中是否常见。

(见

于 2013-02-15T16:01:47.647 回答