我遇到了这个表达式,本以为它应该返回True,但实际上并没有。
>> s = 1 in range(2)
>> s == True
>> True
以上语句按预期工作,但当出现以下情况时:
1 in range(2) == True
当它被执行时,它的值为False。
我尝试搜索答案,但没有得到确切的答案。有人能帮我理解这种行为吗?
我遇到了这个表达式,本以为它应该返回True,但实际上并没有。
>> s = 1 in range(2)
>> s == True
>> True
1 in range(2) == True
当它被执行时,它的值为False。
我尝试搜索答案,但没有得到确切的答案。有人能帮我理解这种行为吗?
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 in range(2)) == True
这与解析和表达式的求值方式有关。
1 in (range(2) == True)
,它会抛出TypeError: argument of type 'bool' is not iterable
。 - Ryan C. Thompson