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