如何比较memoryview对象?

时间:2012-11-26 11:08:25

标签: python memoryview

有没有人对下面的代码有任何想法?

>>> memoryview("abc") < memoryview("bca")
True
>>> memoryview("abc") > memoryview("bca")
True
>>> memoryview("abc") = memoryview("bca")
False

如何在不使用tobytes来获取字符串副本的情况下比较memoryview对象的字符串?

1 个答案:

答案 0 :(得分:2)

memoryview()个对象没有定义任何排序,它的__lt____gt__方法返回NotImplemented单例表示它们不支持排序:

>>> memoryview("abc").__lt__(memoryview('bca'))
NotImplemented
>>> memoryview("abc").__gt__(memoryview('bca'))
NotImplemented

因此,Python 2使用内部一致的排序对这些进行排序。在Python 3中,当您尝试使用TypeError<运算符时,将会引发>

在python 2中,当对象不支持排序时,它们按照它们的内存地址排序(对于对象本身,而不是memoryview所指向的'memory');有关所发生情况的详细信息,请参阅Custom class ordering: no error thrown, what is Python testing for?

仅支持平等和不平等测试:

>>> memoryview("abc").__eq__(memoryview('bca'))
False
>>> memoryview("abc").__eq__(memoryview('abc'))
True
>>> memoryview("abc").__ne__(memoryview('abc'))
False
>>> memoryview("abc").__ne__(memoryview('bca'))
True

您唯一的选择是使用.tobytes().tolist()