2014-09-15 2 views
0

Как python анализирует сопоставленное сопоставление идентичности?Как python анализирует «x is y is z»?

Учитывая, что True, False и None одноэлементны в питоне я ожидал, по крайней мере один из них, чтобы оценить, как True:

>>> True is None is True 
False 
>>> True is None is False 
False 
>>> False is None is True 
False 
>>> False is None is False 
False 

Но, кажется, питон достаточно умен, чтобы знать, что, а не оценивать их парно и уменьшить, было бы лучше, если бы x is y is z должен был возвращаться так же, как id(x) == id(y) == id(z). Это правильное предположение?

+3

«а не оценивать их попарно и уменьшать» - я не уверен, что вы подразумеваете под этим, но почему вы думаете, что Python * не делает это? Это точно так же, как и любое другое прикованное сравнение. – user2357112

+1

Учитывая, что 'x is y is z', похоже, возвращает true, если только если' x', 'y' и' z' являются одним и тем же объектом, это выглядит как довольно безопасная ставка. – murgatroid99

+0

@ user2357112 Моя логика была такой: я не уверен, что она будет сочетаться с левой или с правой стороны, но одна из них (False is None) - False' или 'False is (None is False)' должна быть True. – wim

ответ

3

Правильно, the same:

comparison: expr (comp_op expr)* 
comp_op: '<'|'>'|'=='|'>='|'<='|'<>'|'!='|'in'|'not' 'in'|'is'|'is' 'not' 

expr (comp_op expr)* следует читать, на простом английском языке, «любое количество выражений, разделенных оператором сравнения,» из которых is является один.

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