Python 运算符的优先级 in 和 comparison

python operator precedence of in and comparison

提问人:nobody 提问时间:9/20/2011 最后编辑:user2357112nobody 更新时间:3/29/2023 访问量:2403

问:

以下比较产生: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

评论


答:

23赞 Amber 9/20/2011 #1

Python 手册说 并且具有同等的优先级。因此,默认情况下,它们是从左到右计算的,但也需要考虑链接。您在上面放置的表达式 () 实际上被评估为......in=='1' in '11' == True

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

这当然是.如果你不知道什么是链接,它允许你做一些事情,比如......False

if 0 < a < 1:

在 Python 中,并使其表示您所期望的(“a 大于 0 但小于 1”)。

9赞 Ignacio Vazquez-Abrams 9/20/2011 #2

它与优先级无关。在 Python 中,关系运算符 chain,并且 containment 被视为关系运算符。因此:

'1' in '11' == True

等同于:

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

这是错误的,因为它不等于“11”。True

2赞 Roshan Mathews 9/20/2011 #3

链接允许你写 ,和 mean .看看这个互动:x < y < zx < 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)