【发布时间】:2013-02-14 08:14:18
【问题描述】:
为什么我在python中尝试的以下逻辑操作的输出不同?
-1 or 1
1 or -1
第一个返回-1,第二个返回1
【问题讨论】:
标签: python python-2.7 logical-operators
为什么我在python中尝试的以下逻辑操作的输出不同?
-1 or 1
1 or -1
第一个返回-1,第二个返回1
【问题讨论】:
标签: python python-2.7 logical-operators
and 和 or 都是 懒惰的;他们评估操作数,直到他们可以决定结果(and 停止在第一个 False 操作数;or 停止在第一个 True 操作数)。它们返回评估的最后一个操作数,如 the documentation 中所述:
请注意,
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 期望 'or' 的返回值是 True 或 False(就像其他一些语言中的布尔运算符一样。)
Python 和 Perl 一样,只返回第一个“true”值(其中“true”表示数字非零,字符串非空,非 None 等)
同样,'and' 返回最后一个值当且仅当两者都是“真”。
他可能会对这样的结果感到更加惊讶
{'x':1} or [1,2,3]
Perl 程序员经常习惯性地使用这种结构(如 open(FILE, "foo.txt") || die;我不知道这在 Python 中是否常见。
(见man)
【讨论】: