Как работает связывание операторов в этом примере Python? - PullRequest
8 голосов
/ 27 марта 2012

Я недавно наткнулся на это выражение:

True == False in (False,)

Оно оценивается как False, но я не понимаю, почему.True == False равно False и False in (False,) равно True, поэтому обе (для меня) вероятные возможности

True == (False in (False,))

и

(True == False) in (False,)

оцениваются как True, какЯ бы ожидал.Что здесь не так?

1 Ответ

10 голосов
/ 27 марта 2012

Я считаю, что это угловой случай цепочки операторов сравнения Python. Расширяется до

 (True == False) and (False in (False,))

, что оценивается как False.

Это поведение предназначалось для соответствия обычной математической записи (например, x == y == z означает, что все три равны, или 0 <= x < 10 означает, что x находится в диапазоне [0, 10)). Но in также является оператором сравнения, дающим неожиданное поведение.

...