多次重复`in`关键字

时间:2017-06-29 06:36:11

标签: python

我错误地在表达式中使用了多个in关键字,但代码仍然有效。

是什么意思:

"a" in "bar" in "foo"   # in ... ?
天真地我认为这等同于("a" in "bar") in "foo""a" in ("bar" in "foo")但事实并非如此,因为两者都无效。我在python2或3中得到了相同的行为。

3 个答案:

答案 0 :(得分:40)

in被视为比较运算符,来自Python's documentation for them

  

比较可以任意链接,例如,x < y <= z等同于x < y and y <= z,但y仅评估一次(但在两种情况下z都未评估所有x < y被发现为假时)。

     

正式,如果 a b c ,..., y z 是表达式, op1 op2 ,..., opN 是比较运算符,然后a op1 b op2 c ... y opN z等效于a op1 b and b op2 c and ... y opN z,但每个表达式最多只评估一次。

答案 1 :(得分:4)

Python从左到右进行求值(你可以用括号控制流/分组,tho),比较运算符可以任意链接,所以表达式为:

"a" in "bar" in "foo" in "baz"

基本上最终为:

"a" in "bar" and "bar" in "foo" and "foo" in "baz"

哪个解析为False

答案 2 :(得分:1)

这似乎意味着以下内容:

("a" in "bar") and ("bar" in "foo") - 或False

以下内容可能有所帮助:

  • "a" in "bar" in "foo" =&gt; False
  • "a" in "bar" in "foobar" =&gt; True
  • "b" in "bar" in "foobar" =&gt; True
  • "c" in "bar" in "foobar" =&gt; False

我起初认为它可能是"a" in ("bar" in "foo"),但显然会返回以下内容:

TypeError: argument of type 'bool' is not iterable

因为("bar" in "foo")返回False

修改修正了明显的拼写错误