OR运算符比较None和bool

时间:2012-10-03 13:36:47

标签: python

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

In: None or False
Out: False

In: False or None
Out: None

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

我可以确保,如果一个元素为None,请确保他是比较的第一个arg,就像这样

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

但有人可以解释一下为什么在OR比较中更改订单会影响输出吗?这是Python特有的吗?

感谢。

3 个答案:

答案 0 :(得分:8)

输入help("or")

  

表达式x or y首先评估 x ;如果 x 为真,则为       返回值;否则,评估 y 并得到结果值       归还。

None or False中,None不为true,因此返回False。

False or None中,False不为真,因此返回None。

答案 1 :(得分:1)

DSM已经解释了or运算符的作用。您期望结果是布尔值,因此None or FalseFalse or None始终是False吗?如果是这样,那么你需要明确它并使用bool(None or False),或者如果你有很多要检查,那么any([None, False])等......

答案 2 :(得分:0)

我从未见过逻辑运算符or的顺序重要的语言,除非你看到了langage的情况,python的行为是正常的

or从左到右处理语句,直到其中一个为True(或者它结束)。

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

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