2015-01-23 4 views

ответ

63

СЦЕПЛЕНИЕ операторы, такие как 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.

+0

Интересно, что вы можете цепью произвольно много «является False», и результат по-прежнему верен. 'Eval (« is ».join ([« False »для i в диапазоне (n)]))' –

+5

Потому что он работает для любая цепочка - как '1 <2 <3 <4' так:' 1 <2 и 2 <3 и 3 <4' – abrasadera

+0

IMO, эта функция делает ее более похожей на простой английский. Например, если вы объясняете одноточие кому-то, вы можете указать, что «None is None is None». –

14

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

False is False is False 

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

(False is False) and (False is False) 

Таким образом, вы получите

True and True 

и вычисляет True.

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

1 < x < 10 
+2

Итак, '0> 2 - это ложь' возвращает' False' -> какое интуитивное поведение :) – abrasadera

0
>>> False is False is False 
True 

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

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

5

Я думаю, что 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 

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

25

Цитирование Python official documentation,

Формально, если 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

Thumbs up для цитирования официального источника. – SasQ

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