为什么 "1 in range(2) == True" 的结果是 False?

5

我遇到了这个表达式,本以为它应该返回True,但实际上并没有。

>> s = 1 in range(2)
>> s == True
>> True

以上语句按预期工作,但当出现以下情况时:
1 in range(2) == True

当它被执行时,它的值为False。

我尝试搜索答案,但没有得到确切的答案。有人能帮我理解这种行为吗?

2个回答

12

1 in range(2) == True是一个操作符链,就像当你执行0 < 10 < 20时一样。

为了它成立,你需要:

1 in range(2)

range(2) == True

都为真。后者是假的,因此结果是错误的。在括号中添加括号不再形成操作符链(某些操作符位于括号内),这就解释了(1 in range(2)) == True是正确的。

试一试:

>>> 1 in range(2) == range(2)
True

再次得出一个好教训,即不要将某些东西等同于== True!= False,这最多是多余的,最坏的情况下会产生有害的作用。


1
尝试编写。
(1 in range(2)) == True

这与解析和表达式的求值方式有关。


如果没有括号,表达式会被如何解析呢?如果我运行 1 in (range(2) == True),它会抛出 TypeError: argument of type 'bool' is not iterable - Ryan C. Thompson
@Optimus,能否请您提供这种行为的详细解释?是如何解析导致了这种行为? - Raghav salotra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接