来自`in`运算符的意外结果 - Python

Joh*_*don 16 python

>>> item = 2
>>> seq = [1,2,3]
>>> print (item in seq)
True
>>> print (item in seq is True)
False
Run Code Online (Sandbox Code Playgroud)

为什么第二个print语句输出False

Tim*_*ers 24

in并且is是Python中的比较运算符,在这方面也是如此,比如<==.一般来说,

expr1 <comparison1> expr2 <comparison2> expr3
Run Code Online (Sandbox Code Playgroud)

被视为

(expr1 <comparison1> expr2) and (expr2 <comparison2> expr3)
Run Code Online (Sandbox Code Playgroud)

除了expr2只评估一次.这就是为什么,例如,

0 <= i < n
Run Code Online (Sandbox Code Playgroud)

按预期工作.但是,它适用于任何链式比较运算符.在你的例子中,

item in seq is True
Run Code Online (Sandbox Code Playgroud)

被视为

(item in seq) and (seq is True)
Run Code Online (Sandbox Code Playgroud)

seq is True部分为False,因此整个表达式为False.要获得您可能想要的内容,请使用括号更改分组:

print((item in seq) is True)
Run Code Online (Sandbox Code Playgroud)

单击此处查看文档.