我在我的一个函数中发现了一个特定的错误,其中按位比较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特有的吗?
感谢。
答案 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 False
或False or None
始终是False
吗?如果是这样,那么你需要明确它并使用bool(None or False)
,或者如果你有很多要检查,那么any([None, False])
等......
答案 2 :(得分:0)
我从未见过逻辑运算符or
的顺序不重要的语言,除非你看到了langage的情况,python的行为是正常的
or
从左到右处理语句,直到其中一个为True(或者它结束)。
and
从左到右处理语句,直到其中一个语句为False(或者它到达结尾)。
按位或运算符(在Python中,与大多数语言一样)是管道“|”。