奇怪的行为:Python中的“12in[12,13,14]==True”是什么意思
我本来希望它在左边或右边有括号。
但它似乎在做别的事情!
>>> 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
这是发生的事情:inand==运算符具有相同的优先级,并且它们支持从左到右的链接(请参阅文档),因此表达式等效于
12 in [12,13,14] and [12,13,14] == True
Nowand绑定较少,左侧显然评估为
True。现在对于棘手的部分:一个非空序列,如[12,13,14]列表求值到True,但它是不等于到True。这就是所谓的“真实”值。Truthy 和 Falsy 值不是布尔值(不是 bool 类型的实例),但它们的计算结果为True或False。
所以他们在and比较的右侧评估为False。
THE END
二维码