2014-09-04 3 views
0

Предположим, что введите это в мою оболочку python.Странное поведение с & и | Операторы

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

Это возвращает логическое значение True. Теперь давайте предположим, что я немного поменяю его.

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

Теперь он возвращает False. Зачем?

+3

[приоритет оператора] (https://docs.python.org/2/reference/expressions.html#operator-precedence) – EdChum

+0

Почему downvote? Я не совсем эксперт по python ... –

+0

Я думаю, что это хороший вопрос, +1. – Maroun

ответ

8

Я думаю, вы вводите в заблуждение & и &&. Обратите внимание, что в Python && - это ключевое слово and (насколько мне известно, && и || не существует в Python).

| и & являются бинарными И и ИЛИ операторы, которые действительно отличаются от and и or.

Ваш второй код транслируется в:

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 != 0 является False.

Также обратите внимание на другой ответ о operator precedence.

Смежные вопросы