Подтвердить что ты не робот

Почему "False is False is False" означает "True"?

Почему в Python это оценивается следующим образом:

>>> False is False is False
True

но при попытке со скобками вести себя как ожидалось:

>>> (False is False) is False
False
4b9b3361

Ответ 1

Операторы цепочек, такие как a is b is c, эквивалентны a is b and b is c.

Итак, первый пример False is False and False is False, который оценивается как True and True, который оценивается как True

Наличие скобок приводит к тому, что результат одной оценки сравнивается со следующей переменной (как вы говорите, вы ожидаете), поэтому (a is b) is c сравнивает результат a is b с c.

Ответ 2

Цитата Официальная документация Python,

Формально, если a, b, c,..., y, z являются выражениями и op1, op2,..., opN являются операторами сравнения, то a op1 b op2 c ... y opN z эквивалентно a op1 b and b op2 c and ... y opN z, за исключением того, что каждое выражение оценивается не более одного раза.

Итак, False is False is False оценивается как

(False is False) and (False is False)

Во втором выражении False is False используется второе False в исходном выражении, которое эффективно переводит на

True and True

Вот почему первое выражение оценивается как True.

Но во втором выражении последовательность оценки выглядит следующим образом.

(False is False) is False

На самом деле

True is False

Вот почему результат False.

Ответ 3

Ваше выражение

False is False is False

рассматривается как

(False is False) and (False is False)

Итак, вы получаете

True and True

и это оценивается как True.

Вы можете использовать эту цепочку с другими операторами.

1 < x < 10

Ответ 4

Я думаю, что False is False is False означает (False is False) and (False is False), но (False is False) is False означает:

>>> (False is False) is False
False
>>> a_true = (False is False)
>>> a_true
True
>>> a_true is False
False

Итак, вы получите результат.

Ответ 5

>>> False is False is False
True

В этом случае оценивается каждая пара False. Первые два значения False оцениваются, если он True, затем оценивается второй и третий False и возвращают результат.

В этом случае False is False is False эквивалентно and результатов из 2 команд False is False