python运算符的优先级和比较

时间:2011-09-20 03:33:21

标签: python

以下比较产生True

>>> '1' in '11'
True
>>> ('1' in '11') == True
True

用括号反过来说,我得到一个TypeError:

>>> '1' in ('11' == True)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: argument of type 'bool' is not iterable

那么如何让False没有括号?

>>> '1' in '11' == True
False

4 个答案:

答案 0 :(得分:12)

Python手册说in==具有相同的优先权:

http://docs.python.org/reference/expressions.html#summary

因此,默认情况下,它们会从左到右进行评估,但也需要考虑进行链接。您放在上面的表达式('1' in '11' == True实际被评估为......

('1' in '11') and ('11' == True)

当然是False。如果你不知道链接是什么,它就是你可以做的事......

if 0 < a < 1:
在Python中

,这意味着你所期望的(“a大于0但小于1”)。

答案 1 :(得分:4)

它与优先权无关。在Python关系运算符链中,包含被认为是关系运算符。因此:

'1' in '11' == True

与:

相同
('1' in '11') and ('11' == True)

这是假的,因为True是1而1不等于“11”。

答案 2 :(得分:2)

Chaining允许您撰写x < y < z,并表示x < y and y < z。看看这种互动:

>>> (False == True) == False
True
>>> False == (True == False)
True
>>> False == True == False
False
>>>

因此,在您的示例中,'1' in '11' == True相当于('1' in '11') and ('11' == True)

答案 3 :(得分:-1)

这里发生了什么?

'1' in '11' == True  ==>  False

与:

相同
'1' in ('11' == True)

('11' == True) ==> False

'1' in False

未定义。