【发布时间】:2019-02-25 13:58:40
【问题描述】:
关键字in 通常在python 中检查什么?平等、身份,还是别的什么?
例子:
假设我有两个类 X 和 Y 使用不同的 __eq__ 运算符
class X:
def __eq__(self,other):
return False
class Y:
def __eq__(self,other):
return True
现在我可以了
a = X()
b = a
k = [a]
b in k # -> True
这建议对我进行身份检查。
但我也可以
c = Y()
d = Y()
c is d # -> False
l = [d]
c in l # -> True
这表明检查是否相等。我想出的唯一理论是它首先检查身份,如果不是这样,然后检查是否相等。对吗?
【问题讨论】:
-
是的。它检查身份,然后检查相等性。
-
如果
a is b是True但a == b是False,您的==将完全损坏。根据定义,平等是自反的:x == x代表所有x。 -
@chepner 那是精神分裂症对象模式……
-
@chepner 有
x!=x的对象。例如。float('nan')不等于自身。 -
in本身使用都不使用;见docs.python.org/3/reference/…。
标签: python python-3.x identity equality