Максим Шелудяки:
Почему ('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
.