3

有人对下面的代码有想法吗?

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

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

4

1 回答 1

3

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

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

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

在 python 2 中,当对象不支持排序时,它们会按其内存地址排序(对于对象本身,而不是 memoryview 指向的“内存”);请参阅自定义类排序:没有抛出错误,Python 测试是为了什么?有关发生情况的更多详细信息。

仅支持相等和不等式测试:

>>> 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()

于 2012-11-26T11:34:04.777 回答