为什么Python中的“in”语句会这样评估?

6

抱歉,我无法想出更具描述性的标题。这不是非常重要,而是我发现在Python 3.8(至少)中存在的奇怪习惯,并且我认为我不是唯一一个注意到这一点的人,也可能有一个合理的解释:

>>> 'foo' in 'foobar' == True
False

这也可以反过来实现:

>>> True == 'foo' in 'foobar'
False

然而,从逻辑上讲,我认为这应该是正确的,因为

>>> 'foo' in 'foobar'
True
>>> True == True
True

我猜测这是某种操作顺序错误,但当我尝试对其进行分组时,出现了问题。
>>> ('foo' in 'foobar') == True
True
>>> 'foo' in ('foobar' == True)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: argument of type 'bool' is not iterable

我现在主要是非常好奇,如果有人能够解释一下这个问题那就太好了!

1个回答

6
由于操作符链接,该表达式等价于:
('foo' in 'foobar') and ('foobar' == True)

由于'foobar' == TrueFalse,整个表达式就是False

看起来完全正确。您还可以尝试评估 'foo' in 'foobar' in 'foobarbaz' (True),而无论哪种方式添加括号都会导致类型错误。 - Caleb Stanford

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接