2016-09-09 3 views
1

Вчера при построении условного оператора я столкнулся с тем, что кажется мне странным правилом приоритета. В заявлении я былЛогическое связывание операторов AND и OR в Python

if not condition_1 or not condition_2 and not condition_3: 

Я обнаружил, что

if True or True and False: 
    # Evaluates to true and enters conditional 

На мой взгляд (и из предыдущего опыта на других языках) условие and должен иметь приоритет, как оценивается заявление - так заявление должно эквивалентно

if (True or True) and (False): 

Но на самом деле это

if (True) or (True and False): 

Что кажется странным для меня?

+0

В чем вопрос? –

+1

['или' имеет более низкий приоритет, чем 'и'] (https://docs.python.org/2/reference/expressions.html#operator-precedence) –

ответ

1

Из питона вики:

Выражения x and y сначала вычисляет й; если x является ложным, возвращается его значение ; в противном случае y вычисляется и возвращается значение .

Выражение x или y сначала оценивает x; если x истинно, возвращается его значение ; в противном случае y вычисляется и возвращается значение .

Так что в вашем случае

if True or True and False: 

Поскольку интерпретатор встречает True перед тем or он не продолжает and выражения и вычисляет True

0

Как вы сказали and имеет более высокое предпочтение, так что ваши выражение с круглыми скобками будет именно тем, что вы сказали:

if (True) or (True and False) 

С True or (anything) будет True вне зависимости от здесь, в результате будет True. Даже если бы что-то было оценено, что не было оценено ярлыком.

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

  • Нет связанных вопросов^_^