我本来希望它在左边或右边有括号。
但它似乎在做别的事情!
>>> 12 in [12,13,14] == True
False
>>> (12 in [12,13,13]) == True
True
>>> 12 in ([12,13,14] == True)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: argument of type 'bool' is not iterable
最佳答案
以下表达式的计算结果为 False 可能令人惊讶:
12 in [12,13,14] == True
事情是这样的:in
和 ==
运算符具有相同的优先级,
并且它们支持从左到右的链接(参见 the docs ),所以
该表达式等同于
12 in [12,13,14] and [12,13,14] == True
现在 and
的约束力降低了,左侧显然计算为
真
。现在是棘手的部分:一个非空序列,例如 [12, 13, 14]
列表评估为True
,但它不等于 True
。这是一个所谓的
“真实”的值(value)。 Truthy 和 Falsy 值不是 bool 值(不是 bool 类型的实例),但它们
评估为 True
或 False
。
所以他们在 和
比较的右侧评估为 False
。
关于python - 奇怪的行为 : What does "12 in [12,13,14] == True" mean in Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66282305/