&和|的奇怪行为 运营商

Ste*_*son 0 python boolean

假设将此类型输入到我的python shell中.

>>> print 0 != 1 and (1 == 1 or 2 == 2)
True
Run Code Online (Sandbox Code Playgroud)

这将返回布尔值True.现在让我们假设我稍微改变一下.

>>> print 0 != 1 & (1 == 1 | 2 == 2)
False
Run Code Online (Sandbox Code Playgroud)

现在它又回来了False.为什么?

Mar*_*oun 8

我认为你是混乱&&&.请注意,在Python中,&&是关键字and(据我所知,&&并且||在Python中不存在).

|并且&是二进制AND和OR运算,这是从真正的不同andor.

您的第二个代码被翻译为:

0 != 1 & (1 == (1 | 2) == 2) # 1 | 2 is 3

      ??

0 != 1 & (1 == 3 == 2)

      ??

0 != 1 & int(False)

      ??

0 != 1 & 0 # 1 & 0 is 0
Run Code Online (Sandbox Code Playgroud)

现在,0 != 0False.

另请注意有关运算符优先级的其他答案.