有人对下面的代码有想法吗?
>>> memoryview("abc") < memoryview("bca")
True
>>> memoryview("abc") > memoryview("bca")
True
>>> memoryview("abc") = memoryview("bca")
False
如何在不使用tobytes
获取字符串副本的情况下比较 memoryview 对象的字符串?
有人对下面的代码有想法吗?
>>> memoryview("abc") < memoryview("bca")
True
>>> memoryview("abc") > memoryview("bca")
True
>>> memoryview("abc") = memoryview("bca")
False
如何在不使用tobytes
获取字符串副本的情况下比较 memoryview 对象的字符串?
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()
。