以下比较产生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
答案 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
未定义。