Почему «(„а“в обрах) в обрах»! = «„А“в обрах в обрах»?

Максим Шелудяки:

Почему ('a' in arr) in arr! = 'a' in arr in arr?

arr = [1, True, 'a', 2]
print(('a' in arr) in arr)  # -> True
print('a' in arr in arr)  # -> False
chepner:

Раздел 6.10 справки Python языка обсуждается операторы сравнения и сравнение цепочка. inсчитается оператором сравнения, и поэтому ведет себя так же , как <и т.д. Без скобок для явного группирования, x OP1 y OP2 zэквивалентно x OP1 y and y OP2 zдля любых двух операторов сравнения.

Это означает, что

'a' in arr in arr

без скобок, эквивалентно

'a' in arr and arr in arr

arr не является элементом само по себе, таким образом, выражение False.

Скобки отключить цепочки, так

('a' in arr) in arr

оцениваются , как и любое другим вложенным выражение. 'a' in arrСначала вычисляется на значение True, то True in arrоценивается также продукции True.

рекомендация

отhttp://10.200.1.11:23101/article/api/json?id=8201&siteId=1
рекомендация