【发布时间】:2026-01-01 12:55:02
【问题描述】:
我遇到了这个表达式,我认为它应该评估为 True,但事实并非如此。
>> s = 1 in range(2)
>> s == True
>> True
上面的语句按预期工作,但是当这个:
1 in range(2) == True
被执行,它的计算结果为 False。
我尝试寻找答案,但找不到具体答案。谁能帮我理解这种行为?
【问题讨论】:
标签: python
我遇到了这个表达式,我认为它应该评估为 True,但事实并非如此。
>> s = 1 in range(2)
>> s == True
>> True
上面的语句按预期工作,但是当这个:
1 in range(2) == True
被执行,它的计算结果为 False。
我尝试寻找答案,但找不到具体答案。谁能帮我理解这种行为?
【问题讨论】:
标签: python
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。