読者です 読者をやめる 読者になる 読者になる

bufferって何ですか?

PySide.QtGui.QImage.ScanLineが、bufferオブジェクトを返しました。
PyQt4ではsip.voidptrが返されましたが、よりPythonicにということで、変更されたのでしょう。


bufferというのは見慣れないので、Python 2.6.2の日本語ヘルプで検索してみると・・・

C で実装された Python オブジェクトは、”バッファインタフェース (buffer interface)” と呼ばれる一連の関数を公開していることがあります。これらの関数は、あるオブジェクトのデータを生 (raw) のバイト列形式で公開するために使います。このオブジェクトの使い手は、バッファインタフェースを使うことで、オブジェクトをあらかじめコピーしておく必要なしに、オブジェクトのデータに直接アクセスできます。

バッファインタフェースをサポートするオブジェクトの例として、文字列型とアレイ (array) 型の二つがあります。文字列オブジェクトは、その内容をバッファインタフェースのバイト単位形式で公開しています。アレイもその内容を公開していますが、注意する必要があるのはアレイの要素は複数バイトの値になりうる、ということです。

バッファインタフェースの使い手の一例として、ファイルオブジェクトの write() メソッドがあります。バッファインタフェースを介してバイト列を公開しているオブジェクトは全て、ファイルへの書き出しができます。オブジェクトのバッファインタフェースを操作し、対象となるオブジェクトからデータを返させる PyArg_ParseTuple() には数多くのデータ書式化コードがあります。

バージョン 1.6 から、PythonPython レベルのバッファオブジェクトと、 C 言語レベルのバッファAPIを提供しており、任意のビルトイン型やユーザー定義型はその文字列表現を公開することができます。しかし、両方共、幾つかの欠点のために廃止予定扱いされていて、 Python 3.0 では公式に削除され、新しい C 言語レベルのバッファAPIと新しい Python レベルの memoryview という名前のオブジェクトに置き換えられています。

新しいバッファAPIPython 2.6 に逆移植されており、 memoryviews オブジェクトは Python 2.7 に逆移植されています。古いバージョンとの互換性が必要なければ、古いAPIの代わりにこれらを使うことをおすすめします。

何のことだかよく分りません(@_@)

とりあえず弄ってみると、bytes(2.xではstrですが)のようでした。
少なくとも、スライスできて、for文で要素の文字列を取り出せました。

広告を非表示にする