>>> item = 2
>>> seq = [1,2,3]
>>> print (item in seq)
True
>>> print (item in seq is True)
False
为什么第二个print
语句输出False
?
答案 0 :(得分:24)
in
和is
是Python中的比较运算符,在这方面与<
和==
相同。一般来说,
expr1 <comparison1> expr2 <comparison2> expr3
被视为
(expr1 <comparison1> expr2) and (expr2 <comparison2> expr3)
除了expr2
仅评估一次。这就是为什么,例如,
0 <= i < n
按预期工作。但是,它适用于任何链式比较运算符。在您的示例中,
item in seq is True
被视为
(item in seq) and (seq is True)
seq is True
部分为False,因此整个表达式为False。要获得您可能想要的内容,请使用括号更改分组:
print((item in seq) is True)
答案 1 :(得分:3)
您的陈述item in seq is True
内部评估为(item in seq) and (seq is True)
,如下所示
>>>print ((item in seq) and (seq is True))
False
(seq为True)为False,因此您的语句输出False。
答案 2 :(得分:1)
以下答案不正确。该评论解释了我的验证:
In [17]: item in (seq is True)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-17-4e7d6b2332d7> in <module>()
----> 1 item in (seq is True)
TypeError:类型&#39; bool&#39;的参数是不可迭代的
以前的答案
我相信它正在评估seq is True
(评估为bool False
),然后评估item in False
(评估为False
)。
大概你的意思是print (item in seq) is True
(评估为True
)?