1

我在我的一个函数中发现了一个特定的错误,其中用于按位比较 OR 的 args 的顺序似乎很重要:

In: None or False
Out: False

In: False or None
Out: None

使用 Python 2.7.2 和 IPython 0.10.2 对此进行了检查。

我可以确保,如果一个元素是无,确保他是比较的第一个参数,就像这样

if a==None:
    a or b
else:
    b or a

但是谁能解释一下为什么在 OR 比较中更改顺序会影响输出?这是 Python 特有的吗?

谢谢。

4

3 回答 3

8

从输入help("or")

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

None or False中,None 不正确,因此返回 False。

False or None中,False 不正确,因此返回 None。

于 2012-10-03T13:38:11.677 回答
1

帝斯曼已经解释了or运营商的工作。您是否期望结果是布尔值,所以None or False还是False or None总是False?如果是这样,那么您需要明确说明并使用其中bool(None or False)之一,或者如果您有很多要检查的,那么any([None, False])等等......

于 2012-10-03T13:44:36.847 回答
0

我从未见过逻辑运算符的顺序or无关紧要的语言,除非你见过这样的语言,否则 python 的行为是正常的。

or从左到右处理语句,直到其中一个为真(或到达结尾)。

and从左到右处理语句,直到其中一个为 False(或到达结尾)。

按位或运算符(在 Python 中,与大多数语言一样)是管道“|”。

于 2012-10-03T13:57:03.650 回答