2016-07-10 2 views
6

Недавно я обнаружил, что следующий возвращается True:Где в документах python разрешено приведение в действие оператора `in`?

'a' in 'ab' in 'abc' 

Я знаю сравнение питона СЦЕПЛЕНИЯ, такие как a < b < c, но я не вижу ничего в документации об этом является законным.

Это случайная функция в реализации CPython, или это поведение указано?

ответ

8

Это полностью определенное поведение, а не случайная функция. Оператор цепочки определяется в Comparison operators section:

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

in является одним из операторов сравнения; из того же раздела:

comp_operator ::= "<" | ">" | "==" | ">=" | "<=" | "<>" | "!=" 
        | "is" ["not"] | ["not"] "in" 

Никакие исключения не сделаны для комбинаций, которые могут не иметь большого смысла.

Конкретное выражение, которое вы использовали в качестве примера, таким образом исполняется как 'a' in 'ab' and 'ab' in 'abc', причем только один экземпляр 'ab' выполняется (загружается).

+0

Я смотрел раздел [сравнения] (https://docs.python.org/3/library/stdtypes.html#comparisons) на другой странице, которая не отображает 'in' – Eric

+1

@Eric в нижней части этого раздела: * Еще две операции с одним и тем же синтаксическим приоритетом 'in' и' not in' поддерживаются только типами последовательностей (ниже). * Из-за этого ограничения они не указаны в таблице. –