Насколько я знаю, оператор in python не может быть привязан или, по крайней мере, я не мог найти никакой информации об этом, вот моя проблема
Вот код
arr = [1, True, 'a', 2]
print('a' in arr in arr) // prints False
print(('a' in arr) in arr) // prints True
То, что я не понимаю, является первой печатью, которую я знаю во второй, первая возвращает True, а затем проверяет, находится ли True в arr, но как насчет первого? Проверяет ли он, что "a" находится в arr, а затем, если arr находится в arr?
Посылка неверна; in
операторе может быть цепь. См. Сравнение в документах:
comp_operator ::= "<" | ">" | "==" | ">=" | "<=" | "!="
| "is" ["not"] | ["not"] "in"
Таким образом, как и при любом другом сопоставленном сравнении, a in b in c
эквивалентно (a in b) and (b in c)
(за исключением того, что b
оценивается только один раз.
Причина 'a' in arr in arr
is false заключается в том, что arr in arr
является ложным. Единственное время x in x
истинно, если x - тип, который выполняет сравнения подстрок для __contains__
(например, str
или bytes
), или если это контейнер, который фактически содержит себя (например, lst = []; lst.append(lst)
).
x <= y < z
работать, если вы не сделаете все возможное, чтобы сделать его незаконным. (И это сделало бы реализацию и правила обучения людей немного более сложными. Они даже не запретилиx < y > z
, что более бесполезно и запутанно, чемx in y in z
.)