python运算符的优先级和比较

nob*_*ody 7 python

以下比较产生True:

>>> '1' in '11'
True
>>> ('1' in '11') == True
True
Run Code Online (Sandbox Code Playgroud)

另一方面,使用括号,我得到一个TypeError:

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

那么我怎么False没有括号?

>>> '1' in '11' == True
False
Run Code Online (Sandbox Code Playgroud)

Amb*_*ber 12

Python手册说in并且==优先级相同:

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

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

('1' in '11') and ('11' == True)
Run Code Online (Sandbox Code Playgroud)

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

if 0 < a < 1:
Run Code Online (Sandbox Code Playgroud)

在Python中,这意味着你所期望的("a大于0但小于1").

  • 但那么它如何导致"错误"? (2认同)

Ign*_*ams 5

它与优先级无关。在Python中,关系运算符链和包含被视为关系运算符。因此:

'1' in '11' == True
Run Code Online (Sandbox Code Playgroud)

是相同的:

('1' in '11') and ('11' == True)
Run Code Online (Sandbox Code Playgroud)

这是错误的,因为True1和1不等于“ 11”。