Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
包含python对象的测试_Python - Fatal编程技术网

包含python对象的测试

包含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 那么,我可以假设它使用的是引用比较吗?请参见: 调用以实现成员资格

如果我对元素使用任意对象,Python _; contains __;如何对列表工作? 它会恢复到is操作员吗?或者如果提供,它是否使用_eq _;

一个简单的测试给出了答案

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