包含python对象的测试
如果我对元素使用任意对象,Python _; contains __;如何对列表工作? 它会恢复到is操作员吗?或者如果提供,它是否使用_eq _; 一个简单的测试给出了答案包含python对象的测试,python,Python,如果我对元素使用任意对象,Python _; contains __;如何对列表工作? 它会恢复到is操作员吗?或者如果提供,它是否使用_eq _; 一个简单的测试给出了答案 class Test: pass print(Test() in [Test()]) # -> no a=Test() print(a in [a]) # -> yes print(a in [Test()]) # -> no 那么,我可以假设它使用的是引用比较吗?请参见: 调用以实现成员资格
class Test: pass
print(Test() in [Test()]) # -> no
a=Test()
print(a in [a]) # -> yes
print(a in [Test()]) # -> no
那么,我可以假设它使用的是引用比较吗?请参见:
调用以实现成员资格测试操作符。如果项在self中,则应返回true,否则返回false。对于映射对象,应考虑映射的键,而不是值或键项对。
对于未定义_包含_的对象,成员资格测试首先通过_iter _尝试迭代,然后通过_getitem uu尝试旧的序列迭代协议,请参见语言参考中的本节
见:
调用以实现成员资格测试操作符。如果项在self中,则应返回true,否则返回false。对于映射对象,应考虑映射的键,而不是值或键项对。
对于未定义_包含_的对象,成员资格测试首先通过_iter _尝试迭代,然后通过_getitem uu尝试旧的序列迭代协议,请参见语言参考中的本节
列表的默认uuu contains_uuu实现只是将对象与==\uuuu eq_uu运算符进行比较。
如果没有为类定义此运算符,则默认为is的行为
简言之,lst中的a相当于:
def contains(obj, lst):
for item in lst:
if obj == lst:
return True
return False
contains(a, lst)
==的行为确实会改变项是否显式实现了_eq,否则默认为object identity 列表的默认uuu contains_uuu实现只是将对象与==\uuu eq_uu运算符进行比较。
如果没有为类定义此运算符,则默认为is的行为
简言之,lst中的a相当于:
def contains(obj, lst):
for item in lst:
if obj == lst:
return True
return False
contains(a, lst)
==的行为确实会改变项是否显式实现了_eq,否则默认为object identity