我正在测试闲置,如下所示,但出现了问题......
>>> print 1<>1
False OK
>>> print 1<>0
True OK
>>> print False | True
True OK
>>> print False | 1<>0
True OK
>>> print 1<>1 | 1<>0
False WHY ???
答案 0 :(得分:6)
您正在使用|
按位OR 运算符。您可能正在寻找or
运算符。 or
是布尔OR 运算符。
请注意,<>
已弃用,您确实要使用!=
。
>>> 1 != 1
False
>>> 1 != 0
True
>>> False or True
True
>>> False or 1 != 0
True
>>> 1 != 1 or 1 != 0
True
在Python中,bool()
类型是int()
的子类,True
等于1且False
等于0,因此在{{上使用按位运算符1}}和True
具有相同的输出,就好像这些值是整数:
False
但由于>>> True == 1
True
>>> 10 | True
11
的高于先例<{1}}(或|
),因此首先执行 :
!=
<>
短路,它返回第一个表达式值,它是布尔值true-ish(对于集合非空,对于数值不为零)。
答案 1 :(得分:2)
您的代码被解释为:
>>> print 1 <> (1 | 1) <> 0
False
这是因为order precedence,在提供的链接中有详细记载。
实际上,按位OR运算符的优先级高于not-equals运算符<>
(请注意,这是不推荐的,因此在Python 3中不存在。可以找到进一步的读数{{3 }})。因此,首先评估它,然后解释<>
s。
答案 2 :(得分:1)
这是与运营商优先级相关的问题:
>>> (1<>1) | (1<>0)
True
|
的优先级高于<>
。
答案 3 :(得分:1)