我错误地在表达式中使用了多个in
关键字,但代码仍然有效。
是什么意思:
"a" in "bar" in "foo" # in ... ?
天真地我认为这等同于("a" in "bar") in "foo"
或"a" in ("bar" in "foo")
但事实并非如此,因为两者都无效。我在python2或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
修改修正了明显的拼写错误