我刚刚遇到以下情况,并对 Python 的行为感到好奇:
>>> x = 1
>>> x in range(2)
True
>>> type(x in range(2))
<type 'bool'>
>>> x in range(2) == True
False
>>> x in range(2) == False
False
>>> (x in range(2)) == True
True
特别是,为什么要(1 in range(2)) == True
评估True
和l in range(2) == True
评估到False
?后者似乎有一些奇怪的评估行为顺序,除了如果你明确地把顺序弄错了,你会得到TypeError
:
>>> x in (range(2) == True)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: argument of type 'bool' is not iterable
作为记录,我不知道我会使用什么情况x in range(2) == True
来代替 just x in range (2)
,但只是想知道为什么会这样。我也在 Python2.7 和 Python3 中测试过这个,行为是一样的。