1
比方说,我们有与真正的运营商比较列表的成员
a = [1, 2]
在解释
然后,
for e in a: print e in a
打印
True
True
但下面的代码不作感觉我或我的任何蟒蛇专家朋友
个for e in a: print e in a == True
打印
False
False
有人能解释一下吗?
比方说,我们有与真正的运营商比较列表的成员
a = [1, 2]
在解释
然后,
for e in a: print e in a
打印
True
True
但下面的代码不作感觉我或我的任何蟒蛇专家朋友
个for e in a: print e in a == True
打印
False
False
有人能解释一下吗?
如果我们熬了混乱表达了下来,那就是:
1 in a == True
这让False
(我们可能会认为True
)。因此,让我们用ast
模块来检查它:
>>> print ast.dump(ast.parse('(1 in a) == True'))
Module(body=[
Expr(value=Compare(
left=Compare(
left=Num(n=1),
ops=[In()],
comparators=[
Name(id='a', ctx=Load())
]),
ops=[Eq()],
comparators=[
Name(id='True', ctx=Load())
]))
])
你看到的区别:
>>> import ast
>>> print ast.dump(ast.parse('1 in a == True'))
Module(body=[
Expr(value=Compare(
left=Num(n=1),
ops=[In(), Eq()],
comparators=[
Name(id='a', ctx=Load()),
Name(id='True', ctx=Load())
]))
])
与加括号中的版本,它的工作原理,你可能希望的方式进行比较?第二个就像我们预计的那样,就像Eq(In(1, a), True)
。但第一个是In(1, a) Eq(a, True)
。什么?这两件事情如何一起进行?那么,他们形成一个连接,如and
。
因此,它的结果是第一个表达式相当于1 in a and a == True
。
但是为什么?
这是因为Python支持“链式条件句,”是这样的:
1 < 3 < 5
你举的例子只是附带损害:显然不仅是像<
条件语句链接,但in
计数了。这对我来说并不直观,但这就是它的工作原理。你可以在这里阅读更多关于链接的信息:https://docs.python.org/2/reference/expressions.html#not-in
是不是第一个比较说'In(1,a)Eq(a,True)'?否则它会返回'True',因为'1 == True'是'True',但'a == True'是'False',对吧? – 2014-10-09 07:41:31
@Neftas:你是对的。这是我的答案中的一个简单的错字。现在已经修复了。谢谢。 – 2014-10-09 08:04:22