`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__
进行子字符串比较的类型(如 str
或 bytes
),或者如果它是一个实际包含自身的容器(喜欢 lst = []; lst.append(lst)
).
据我所知,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__
进行子字符串比较的类型(如 str
或 bytes
),或者如果它是一个实际包含自身的容器(喜欢 lst = []; lst.append(lst)
).