python比较,出了点问题

时间:2013-08-29 11:43:22

标签: python python-2.7

我正在测试闲置,如下所示,但出现了问题......

>>> 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 ???

4 个答案:

答案 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)

优先级。您的命令被解释为1 <> (1 | 1) <> 0

顺便说一下,您不应该使用<>进行比较。请改用!=

有关详细信息,请查看operators上的文档。