15

今天早上,我发现自己在写这样的东西:

if (a == b == c):
  # do something

并且很惊讶它给了我预期的结果。

我认为它会表现为:

if ((a == b) == c):
  # do something

但显然没有。似乎 Python 对第一个语句的处理与第二个不同,这很好,但我找不到任何关于此的文档或解释。

我测试并得到了这个:

In [1]: 2 == 2 == 2
Out[1]: True

In [2]: (2 == 2) == 2
Out[2]: False

有人愿意向我解释一下关于==(或!=)这种“链接”的规则是什么?

非常感谢你。

4

3 回答 3

24

这适用于所有比较运算符 - 例如,您还可以执行以下操作:

>>> 4 < 5 < 6
True
>>> 4 < 5 !=2
True

一般来说,根据文档a op1 b op2 cwhereop1op2are any: <, >, !=, ==, <=, >=, is, is not, inornot in将给出与以下内容相同的结果:

a op1 b and b op2 c

文档还说这可以进行任意多次比较,所以:

>>> 5 != '5' != 'five' != (3+2)
True

有时这可能是一个稍微令人困惑的结果,因为它似乎在说5 != (3+2)- 每个操作数仅与与其紧邻的操作数进行比较,而不是进行所有可能的组合(从仅使用的示例中可能不清楚==,因为它不会如果一切都合理定义,则会影响答案__eq__)。

于 2012-06-22T09:48:03.823 回答
12

据我所知,您指出的示例不是链接。

2 == 2 == 2就像 (2 == 2) and ( 2 == 2)原来是这样True and True

尽管

(2 == 2) == 2就好像(True) == 2

于 2012-06-22T09:47:18.597 回答
3

在这里查看:http: //docs.python.org/reference/expressions.html#not-in

于 2012-06-22T09:46:46.300 回答