3

誰かが以下のコードについてアイデアを持っていますか?

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

文字列のコピーを取得するために使用せずに、memoryviewオブジェクトの文字列を比較するにはどうすればよいtobytesですか?

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 に答える