来自`in`运算符的意外结果-Python
为什么第二个来自`in`运算符的意外结果-Python,python,Python,为什么第二个打印语句输出False?中的和is是Python中的比较运算符,在这方面与以下情况相同:您的语句在seq中的项为True在内部评估为(seq中的项)和(seq为True),如下所示 print((item in seq) is True) (seq is True)为False,因此您的语句输出为False。下面的答案不正确。评论解释了这一点,我证实: >>>print ((item in seq) and (seq is True)) False [17]中的
打印语句输出False
?中的和is
是Python中的比较运算符,在这方面与以下情况相同:您的语句在seq中的项为True
在内部评估为(seq中的项)和(seq为True)
,如下所示
print((item in seq) is True)
(seq is True)为False,因此您的语句输出为False。下面的答案不正确。评论解释了这一点,我证实:
>>>print ((item in seq) and (seq is True))
False
[17]中的:中的项(seq为True)
---------------------------------------------------------------------------
TypeError回溯(最近一次调用上次)
在()
---->中的1项(序号为真)
TypeError:类型为“bool”的参数不可编辑
先前的答复
我相信它是在评估seq is True
(评估结果为boolFalse
),然后评估False中的项(评估结果为False
)
大概您的意思是打印(seq中的项)为True
(其计算结果为True
) 这可能是因为python如何计算表达式。您可能想使用打印((seq中的项目)是正确的)
这在@Tim Peters answer?@t.m.adam中解释得不够充分吗?我们都或多或少地同时回答了这个问题。如果他的答案解释得更详细,让我删除这个答案。@初学者否。一个问题不能有两个正确答案吗?@初学者我认为留下你的答案没有什么坏处。虽然你不应该失去你在这个问题上获得的代表,但是如果你删除了,请不要误解我的评论。我只是想鼓励您改进您的答案。False中的项
会引发一个TypeError
,因为右边的值必须是iterable,而False
不会更改答案。谢谢
(expr1 <comparison1> expr2) and (expr2 <comparison2> expr3)
0 <= i < n
item in seq is True
(item in seq) and (seq is True)
print((item in seq) is True)
>>>print ((item in seq) and (seq is True))
False
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)