来自`in`运算符的意外结果 - Python

时间:2017-07-19 04:20:07

标签: python

>>> item = 2
>>> seq = [1,2,3]
>>> print (item in seq)
True
>>> print (item in seq is True)
False

为什么第二个print语句输出False

3 个答案:

答案 0 :(得分:24)

inis是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)

Click here for the docs

答案 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)?