1

我正在像下面这样在空闲状态下进行测试,但是出了点问题..

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

4 回答 4

6

您正在使用| 按位或运算符。您可能正在寻找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 和False0,因此使用按位运算符 onTrue并且False具有与这些值是整数一样的输出:

>>> True == 1
True
>>> 10 | True
11

但因为|有比(或)更高的先例,所以首先执行:!=<>

>>> 1 != (1 | 1) != 0
False
>>> (1 != 1) | (1 != 0)
True

or 短路,它返回第一个布尔值 true-ish 的表达式值(集合非空,数值非零)。

于 2013-08-29T11:47:36.157 回答
2

您的代码被解释为:

>>> print 1 <> (1 | 1) <> 0
False

这是因为顺序优先,在提供的链接中有详细记录。

几乎,按位 OR 运算符比不等于运算符具有更高的优先级<>(请注意,这已被弃用,因此在 Python 3 中不存在。进一步阅读可以在这里找到)。因此,它首先被评估,然后<>s 被解释。

于 2013-08-29T11:49:01.833 回答
1

这是运算符优先级相关的问题:

>>> (1<>1) | (1<>0)
True

|的优先级高于<>

于 2013-08-29T11:47:43.800 回答
1

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

顺便说一句,您不应该<>用于比较。改为使用!=

有关更多信息,请查看有关操作符的文档。

于 2013-08-29T11:48:17.940 回答