有人可以帮我解释一下吗?
>>> None is None is None
True
>>> (None is None) is None
False
'is'运算符不是2个操作数,比较左边的对象,返回Boolean?
答案 0 :(得分:3)
因为它被解释为chained comparison:
comparison ::= or_expr ( comp_operator or_expr )*
comp_operator ::= "<" | ">" | "==" | ">=" | "<=" | "!="
| "is" ["not"] | ["not"] "in"
比较可以任意链接,例如,
x < y <= z
是等效的 到x < y and y <= z
,除了y只评估一次(但在两者中) 如果发现x < y
为假,则根本不评估案例z。正式,如果
a, b, c, …, y, z
是表达式,op1, op2, …, opN
是。a op1 b op2 c ... y opN z
比较运算符,然后a op1 b and b op2 c and ... y opN z
相当于is
,除了每个表达式都是 最多评估一次。
因此,由于None is None and None is None
是比较运算符,因此您的第一个表达式等同于:
return ()
答案 1 :(得分:-1)
与2 < 3 < 4
比较。
第二个没有和第一个没有相同吗?是。第3个和第2个相同吗?是。
OTOH,(True) is None
显然是假的。括号打破了链接。
评估lo < n < hi
是一种常见的python习惯用法,这并不会让你担心True < 4
的中间结果。评估x is y is z
不太常见,但对于您的单身None
,这三个对象是相同的。