Python';s in(_包含__)运算符返回一个值既不为真也不为假的布尔值

Python';s in(_包含__)运算符返回一个值既不为真也不为假的布尔值,python,boolean,membership,comparison-operators,Python,Boolean,Membership,Comparison Operators,正如所料,空元组中不包含1 >>> 1 in () False 但是返回的False值不等于False >>> 1 in () == False False 从另一个角度看,中的运算符返回一个既不是True也不是False的bool: >>> type(1 in ()) <type 'bool'> >>> 1 in () == True, 1 in () == False (False, False) 或者

正如所料,空元组中不包含1

>>> 1 in ()
False
但是返回的
False
值不等于
False

>>> 1 in () == False
False
从另一个角度看,中的
运算符返回一个既不是
True也不是
False的
bool

>>> type(1 in ())
<type 'bool'>
>>> 1 in () == True, 1 in () == False
(False, False)
或者它的值存储在变量中

>>> value = 1 in ()
>>> value == False
True
在Python2和Python3中都可以观察到这种行为


你能解释一下发生了什么吗?

你遇到了比较运算符链接<代码>1 in()==False
表示
(1 in())==False

相反,比较是链接的,表达式的真正含义是:

(1 in ()) and (() == False)
因为
(1in())
已经为false,所以链式表达式的后半部分将被完全忽略(因为
false和something\u other
返回
false
而不管
something\u other
的值是什么)

见:


比较可以任意链接,例如,
xa is b is None
1
这样的表达式,但不能在
in
not in
is
is not
之间相互混合,或者使用(in)相等运算符。
(1 in ()) and (() == False)
>>> (1 in ()) is False
True
3 > 1 == True
3 > 2 == True