与&amp ;;的奇怪行为和|运营商

时间:2014-09-04 12:24:59

标签: python boolean

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

>>> print 0 != 1 and (1 == 1 or 2 == 2)
True

返回布尔值True。现在让我们假设我稍微改了一下。

>>> print 0 != 1 & (1 == 1 | 2 == 2)
False

现在它返回False。为什么呢?

2 个答案:

答案 0 :(得分: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

现在,0 != 0False

另请注意关于operator precedence的其他答案。

答案 1 :(得分:3)