2015-08-08 3 views
2

В названии говорится все. Например, 1<2<3 возвращает True и 2<3<1 возвращает False.Почему `a <b <c` работает в Python?

Замечательно, что он работает, но я не могу объяснить , почему он работает ... Я не могу найти что-либо об этом в документации. Это всегда: expression boolean_operator expression, а не два булевых оператора). Также: a<b возвращает логическое значение, а boolean boolean_operator expression не объясняет поведение.

Я уверен, что объяснение (почти) очевидно, но я, кажется, пропустил его.

+0

Python решает 'а <Ь

+0

Оно также будет решать с любыми двумя операторами сравнения, что означает '0 <2 в диапазоне (3)' должны полностью верните «Истину», независимо от того, как это выглядят на английском. – NightShadeQueen

ответ

9

Это известно как цепочка оператора. Документация доступна по адресу:

https://docs.python.org/2/reference/expressions.html#not-in

Сравнения могут быть соединены произвольно, например, х < у < = г эквивалентно х < у и у < = г, за исключением того, что у вычисляется только один раз (но в обоих случаях z вообще не оценивается, когда x < y оказывается ложным).

И, если вы действительно любите формальных определений:

Формально, если 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, за исключением того, что каждое выражение оценивается не более одного раза.

+0

Ницца. Спасибо за документацию! – agtoever

2

Ваши многочисленные операторы имеют одинаковый приоритет, поэтому теперь он будет работать через них последовательно. 1<2<3 идет к 1<2, который является Т, то есть 2<3 Т. 2<3<1 состоит из двух частей, 2<3 Т, но 3<1 является F, так что все выражение имеет значение F.

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