Python评估顺序

dme*_*sky 4 python

这是代码,我不太明白,它是如何工作的.谁能告诉,这是一种预期的行为吗?

$ipython

In [1]: 1 in [1] == True
Out[1]: False

In [2]: (1 in [1]) == True
Out[2]: True

In [3]: 1 in ([1] == True)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)

/home/dmedvinsky/projects/condo/condo/<ipython console> in <module>()

TypeError: argument of type 'bool' is not iterable

In [4]: from sys import version_info

In [5]: version_info
Out[5]: (2, 6, 4, 'final', 0)
Run Code Online (Sandbox Code Playgroud)

Cha*_*iam 15

这是"链接"的一个例子,这是Python中的问题.这是Python的一个(可能是愚蠢的)技巧:

a op b op c
Run Code Online (Sandbox Code Playgroud)

相当于:

(a op b) and (b op c)
Run Code Online (Sandbox Code Playgroud)

对于具有相同优先级的所有运营商.不幸的是,in并且==具有相同的优先级,is以及所有比较.

所以,这是你的意外情况:

1 in [1] == True  # -> (1 in [1]) and ([1] == True) -> True and False -> False
Run Code Online (Sandbox Code Playgroud)

有关优先级表,请参阅http://docs.python.org/reference/expressions.html#summary.

  • 链接通常用于像"1 <x <5"这样的表达式(所以它并不总是很傻),但在这种情况下,我也非常惊讶.好查考查尔斯! (3认同)
  • 只是为了澄清,链接只发生在比较运算符上,而不是"所有具有相同优先级的运算符".但是,比较运算符确实具有相同的优先级. (2认同)