`in` 运算符链接的意外结果

Unexpected result with `in` operator chaining

据我所知,Python 中的 in 运算符无法链接,或者至少我找不到任何关于它的信息,这是我的问题

这是代码

arr = [1, True, 'a', 2]
print('a' in arr in arr)  # prints False
print(('a' in arr) in arr)  # prints True

我不明白的是第一个打印,我知道第二个是第一个 in returns True 然后它检查 True 是否是 in arr,但是第一个呢?它是否检查 'a' 是否为 in arr,然后检查 arr 是否为 in arr

前提错误; in 运算符 可以 链接。请参阅文档中的 Comparisons

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

因此,与任何其他链式比较一样,a in b in c 等同于 (a in b) and (b in c)(除了 b 仅计算一次。

之所以'a' in arr in arr是假的,是因为arr in arr是假的。 x in x 唯一为真的情况是 x 是为 __contains__ 进行子字符串比较的类型(如 strbytes),或者如果它是一个实际包含自身的容器(喜欢 lst = []; lst.append(lst)).