正如预期的那样,空元组不包含1
>>> 1 in ()
False
Run Code Online (Sandbox Code Playgroud)
但False返回的值不等于False
>>> 1 in () == False
False
Run Code Online (Sandbox Code Playgroud)
从另一个角度看,in操作员返回bool既不是也不True是False:
>>> type(1 in ())
<type 'bool'>
>>> 1 in () == True, 1 in () == False
(False, False)
Run Code Online (Sandbox Code Playgroud)
但是,如果原始表达式带括号,则恢复正常行为
>>> (1 in ()) == False
True
Run Code Online (Sandbox Code Playgroud)
或其值存储在变量中
>>> value = 1 in ()
>>> value == False
True
Run Code Online (Sandbox Code Playgroud)
在Python 2和Python 3中都观察到了这种行为.
你能解释一下发生了什么吗?
不知何故,这工作:
def in_range(min, test, max):
return min <= test <= max
print in_range(0, 5, 10) # True
print in_range(0, 15, 10) # False
Run Code Online (Sandbox Code Playgroud)
但是,我不能完全弄清楚这里的操作顺序.我们来测试一下这个False案子:
print 0 <= 15 <= 10 # False
print (0 <= 15) <= 10 # True
print 0 <= (15 <= 10) # True
Run Code Online (Sandbox Code Playgroud)
显然,这并不是解决简单的操作顺序问题.区间比较是一个特殊的算子,还是其他的东西?