Python 为什么(1 in[1,0]==True)的计算结果为False?

Python 为什么(1 in[1,0]==True)的计算结果为False?,python,syntax,operator-precedence,Python,Syntax,Operator Precedence,当我在看我的答案时,我发现我不明白我自己的答案 我真的不明白这是如何被解析的。为什么第二个示例返回False >>> 1 in [1,0] # This is expected True >>> 1 in [1,0] == True # This is strange False >>> (1 in [1,0]) == True # This is what I wanted it to be True &

当我在看我的答案时,我发现我不明白我自己的答案

我真的不明白这是如何被解析的。为什么第二个示例返回False

>>> 1 in [1,0]             # This is expected
True
>>> 1 in [1,0] == True     # This is strange
False
>>> (1 in [1,0]) == True   # This is what I wanted it to be
True
>>> 1 in ([1,0] == True)   # But it's not just a precedence issue!
                           # It did not raise an exception on the second example.

Traceback (most recent call last):
  File "<pyshell#4>", line 1, in <module>
    1 in ([1,0] == True)
TypeError: argument of type 'bool' is not iterable
但是对于我的例子,
1in([1,0]==True)
作为一个表达式是没有意义的,因此没有两种(公认错误的)可能的解释,只有一种可能:

>>> (1 in [1,0]) == True

Python实际上在这里应用了比较运算符链接。表达式被翻译为

(1 in [1, 0]) and ([1, 0] == True)
这显然是错误的

这也适用于以下表达式:

a < b < c
a
翻译成

(a < b) and (b < c)
(a
(不计算
b
两次)


有关详细信息,请参阅。

运算符优先级。。。
=
中的
绑定得更紧,因此首先计算
[1,0]==True
,然后将其结果输入到其他结果中的
1。我已经删除了Python-2.7标记,因为Python 3.2的行为方式相同。@Marc B:没有解释第二个expression@MarcB,这个问题包括一个使用括号来反驳这种解释的测试。关于这一点的额外证明,
1在[1,0]==[1,0]
中的计算结果为
True
。我一直认为这是一个语言难题。我更希望
中的
运算符比其他比较运算符具有更高的优先级,并且它不是链式的。但也许我错过了一个用例。很好的捕捉,我甚至没有想到这一点。允许
中的
链接没有多大意义-毕竟
x
是有意义的,但是
x在y中在z
@Sven有用:也许吧。可读性:绝对不是。Python声称用这种约定来模拟常见的数学排版,但当在
中与
一起使用时,情况就不再是这样了,这使得它非常违反直觉。@KonradRudolph:我看到过类似于“1”的想法≤ x∈ ℝ" 在数学课文中不止一次,但我基本上同意你的观点。
a < b < c
(a < b) and (b < c)