私が書いたハッシュ関数の行は次のとおりです。
M = tuple(buffer(M, i, Nb) for i in range(0, len(M), Nb))
これにより、長い文字列 M が長さ Nb の短い「文字列」に分割されます。ここで、Nb は一度に処理できるバイト/文字数です。次のように文字列のスライスを作成した場合に発生するように、文字列の一部をコピーせずにこれを行います。
M = tuple(M[i*Nb:i*Nb+Nb] for i in range(0, len(M), Nb))
スライスした場合と同じように、M を反復処理できるようになりました。
H = key
for Mi in M:
H = encrypt(H, Mi)
基本的に、バッファとメモリビューは、Python での文字列の不変性、およびスライスなどの一般的なコピー動作に対処するための効率的な方法です。
メイン バッファ/メモリビュー ドキュメントは C 実装に関するものですが、標準タイプのページにはメモリビューの下に少しの情報があります: http://docs.python.org/library/stdtypes.html#memoryview-type
編集:私のブックマークでこれを見つけました。 en&client=firefox-a&gl=us&strip=1は、非常に優れた簡潔な記事です。
編集 2: When should a memoryview be used?からそのリンクを取得したことがわかりました。そもそも、その質問は詳細に回答されておらず、リンクは無効になっているため、これが役立つことを願っています.