使用-1进行逻辑或运算

3
为什么我在Python中尝试的逻辑运算输出不同?
-1 or 1
 1 or -1

第一个返回 -1 ,第二个返回 1

6个回答

8
andor都是“懒惰”的;它们评估操作数,直到它们可以确定结果(and在第一个False操作数处停止;or在第一个True操作数处停止)。正如文档中所述,它们返回最后评估的操作数:

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


7

阅读文档

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


3
or 运算符可以短路,它返回在布尔上下文中第一个为 True 的值,否则返回最后计算的表达式。在布尔上下文中,-11 都是 True,因此你会得到第一个数字。
例如: 0None 和所有空容器都被视为 False
>>> 0 or 5
5
>>> '' or []
[]

3

首先,第一部分-11都被评估为True并返回。第二部分被忽略。


3

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


0

我认为OP期望'or'的返回值为True或False(这在其他一些语言的布尔运算符中是成立的)。

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

同样,如果两个值都是“真”,则'and'仅返回最后一个值。

他可能会对类似以下代码的结果感到更惊讶

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

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

(参见man)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接