有人对下面的代码有什么想法吗?
>>> memoryview("abc") < memoryview("bca")
True
>>> memoryview("abc") > memoryview("bca")
True
>>> memoryview("abc") = memoryview("bca")
False如何在不使用tobytes获取字符串副本的情况下比较memoryview对象的字符串?
发布于 2012-11-26 19:34:05
memoryview()对象没有定义任何排序,它的__lt__和__gt__方法返回NotImplemented单例,表明它们不支持排序:
>>> memoryview("abc").__lt__(memoryview('bca'))
NotImplemented
>>> memoryview("abc").__gt__(memoryview('bca'))
NotImplemented因此,Python2使用内部一致的顺序对这些数据进行排序。在Python3中,当您尝试使用<和>操作符时,将引发TypeError。
在Python2中,当对象不支持排序时,它们会按它们的内存地址排序(对象本身,而不是内存视图所指向的‘内存’);有关发生的更多细节,请参阅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()。
https://stackoverflow.com/questions/13563596
复制相似问题