Как работает интервал сравнения?
Как-то это работает:
def in_range(min, test, max):
return min <= test <= max
print in_range(0, 5, 10) # True
print in_range(0, 15, 10) # False
Однако я не могу понять порядок операций здесь. Пусть тест False
:
print 0 <= 15 <= 10 # False
print (0 <= 15) <= 10 # True
print 0 <= (15 <= 10) # True
Ясно, что это не решение простого порядка операций. Является ли сравнение интервалов специальным оператором или что-то еще происходит?
Ответы
Ответ 1
В отличие от большинства языков, Python поддерживает цепные операторы сравнения и оценивает их, поскольку они будут оцениваться в обычной математике.
Эта строка:
return min <= test <= max
оценивается Python следующим образом:
return (min <= test) and (test <= max)
Большинство других языков, однако, оценили бы это следующим образом:
return (min <= test) <= max
Ответ 2
Как указано в документации Python:
Сравнение может быть скопировано произвольно, например, x < y <= z
эквивалентно x < y and y <= z
, за исключением того, что y
оценивается только один раз (но в обоих случаях 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
, за исключением того, что каждое выражение оценивается не более одного раза.