Python 中两个或多个连续的成员资格运算符的处理顺序是什么?
In which order are two or more consecutive membership operators treated in Python?
>>> g = [2, True, 5]
>>> print(2 in g in g)
False
>>> g.append(g)
>>> print(2 in g in g)
True
当列表中同时存在 2
和 'True' 时,为什么第一个片段输出 False
?
为什么追加'g'后输出True
?
这是 operator chaining,将扩展到 1 in g and g in g
。因此,只有在您将 g
附加到自身后,这才会变为 true。
您可以使用括号来获得您想要的行为:(1 in g) in g
。这会强制首先评估 1 in g
部分(但是 in
比较是否相等,而 True == 1
因此 True
实际上不需要成为列表的一部分)。
它的工作原理是operator chaining
所以 print(1 in g in g)
相当于
print(1 in g and g in g)
结果是
False
(对与错)
>>> g = [2, True, 5]
>>> print(2 in g in g)
False
>>> g.append(g)
>>> print(2 in g in g)
True
当列表中同时存在 2
和 'True' 时,为什么第一个片段输出 False
?
为什么追加'g'后输出True
?
这是 operator chaining,将扩展到 1 in g and g in g
。因此,只有在您将 g
附加到自身后,这才会变为 true。
您可以使用括号来获得您想要的行为:(1 in g) in g
。这会强制首先评估 1 in g
部分(但是 in
比较是否相等,而 True == 1
因此 True
实际上不需要成为列表的一部分)。
它的工作原理是operator chaining
所以 print(1 in g in g)
相当于
print(1 in g and g in g)
结果是
False
(对与错)