奇数运算符优先级/关联行为

时间:2015-01-21 15:41:30

标签: python python-2.7 operator-precedence

如何在Python 2.7中使用以下内容

True == 'w' in 'what!?'

的行为与两者不同

(True == 'w') in 'what!?'

True == ('w' in 'what!?')

>>> True == 'w' in 'what!?'
False

>>> (True == 'w') in 'what!?'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'in <string>' requires string as left operand, not bool

>>> True == ('w' in 'what!?')
True

2 个答案:

答案 0 :(得分:6)

在Python中,比较可以是chained together

  

比较可以任意链接,例如,x <1。 y&lt; = z等于x&lt; y和y&lt; = z,除了y仅被评估一次(但在两种情况下,当x&lt; y被发现为假时,根本不评估z。)

所以你的代码实际上等同于

>>> (True == 'w') and ('w' in 'what!?')
False

答案 1 :(得分:2)

我们来看看:

>>> import ast
>>> ast.dump(ast.parse("""True == 'w' in 'what!?'""", mode='eval'))
"Expression(body=Compare(left=Name(id='True', ctx=Load()), ops=[Eq(), In()],
comparators=[Str(s='w'), Str(s='what!?')]))"

这是chained comparison

  

比较可以任意链接,例如,x < y <= z等同于x < y and y <= z,但y只评估一次[...]