我有点困惑为什么下面的代码
str1 = "text"
str2 = "some longer text"
if str1 in str2 == True:
pass # do something
不起作用。 (我知道我可以通过编写if str1 in str2 == True:
轻松解决此问题-这不是问题!)
问题是,为什么
str1 in str2 == True
返回False
吗?我的意思是,如果运算符in
比==
运算符强,我将获得以下代码
if (str1 in str2) == True:
这实际上是有效的(因为它将被评估为True)...反之,==
运算符比in
运算符更强大,我希望TypeError: argument of type 'bool' is not iterable
异常。实际上是代码
if a = "" in ("" == True):
提出了这样的例外。那么Python在这里做什么呢?首先评估哪个运算符(in
和==
)?结果为何False
:
a = ("" in "" == True)
而不是True
或TypeError:类型'bool'的参数不可迭代Exception? The only way I could imagine the
错误`的结果是Python试图同时执行两个运算符。但是那怎么运作呢?
我注意到的事情:
"" in "" == ""
实际上返回True
a = ("" in "" == True)
,则type(a)
将产生<type 'bool'>
。因此,结果实际上是一个布尔值-如预期的那样-而不是某种其他对象。不过,print(a)
的结果是False
。