このモジュールでは、基本的な値 (文字、整数、浮動小数点数) のアレイ (array、配列) を効率よく表現できるオブジェクト型を定義しています。 アレイはシーケンス (sequence) 型であり、中に入れる オブジェクトの型に制限があることを除けば、リストとまったく同じように振 る舞います。オブジェクト生成時に一文字の型コード を用いて型を指 定します。次の型コードが定義されています:
型コード | C の型 | Python の型 | 最小サイズ (バイト単位) |
---|---|---|---|
'c' |
char | 文字(str型) | 1 |
'b' |
signed char | int型 | 1 |
'B' |
unsigned char | int型 | 1 |
'u' |
Py_UNICODE | Unicode文字(unicode型) | 2 |
'h' |
signed short | int型 | 2 |
'H' |
unsigned short | int型 | 2 |
'i' |
signed int | int型 | 2 |
'I' |
unsigned int | long型 | 2 |
'l' |
signed long | int型 | 4 |
'L' |
unsigned long | long型 | 4 |
'f' |
float | float型 | 4 |
'd' |
double | float型 | 8 |
値の実際の表現はマシンアーキテクチャ (厳密に言うとCの実装) によって決
まります。値の実際のサイズはitemsize 属性から得られます。
Python の通常の整数型では C の unsigned (long) 整数の最大範囲を表せな
いため、'L'
と'I'
で表現されている要素に入る値は Python
では長整数として表されます。
このモジュールでは次の型を定義しています:
typecode[, initializer]) |
バージョン 2.4 で 変更 された仕様: 以前はリストか文字列しか受け付けませんでした。 リストか文字列を渡した場合、新たに作成されたアレイのfromlist()、 fromstring()あるいはfromunicode()メソッド (以下を参照 して下さい) に渡され、初期値としてアレイに追加されます。それ以外の場合 には、イテレーション可能オブジェクト initializer は新たに作成 されたオブジェクトのextend()メソッドに渡されます。
アレイオブジェクトでは、インデクス指定、スライス、連結および反復といっ た、通常のシーケンスの演算をサポートしています。スライス代入を使うときは、 代入値は同じ型コードのアレイオブジェクトでなければなりません。 それ以外のオブジェクトを指定するとTypeError を送出します。 アレイオブジェクトはバッファインタフェースを実装しており、 バッファオブジェクトをサポートしている場所ならどこでも利用できます。
次のデータ要素やメソッドもサポートされています:
x) |
) |
(address, length)
を返します。
バイト単位で表したメモリバッファの大きさは
array.buffer_info()[1] * array.itemsize
で計算できま
す。例えばioctl() 操作のような、メモリアドレスを必要とする
低レベルな (そして、本質的に危険な) I/Oインタフェースを使って作業する
場合に、ときどき便利です。アレイ自体が存在し、長さを変えるような演算を
適用しない限り、有効な値を返します。
注意: C やC++ で書いたコードからアレイオブジェクトを使う場合 (buffer_info の情報を使う意味のある唯一の方法です) は、 アレイオブジェクトでサポートしているバッファインタフェースを使う方が より理にかなっています。このメソッドは後方互換性のために保守されており、 新しいコードでの使用は避けるべきです。バッファインタフェースの説明は Python/C APIリファレンスマニュアル にあります。
) |
x) |
iterable) |
f, n) |
list) |
s) |
s) |
x) |
i, x) |
[i]) |
-1
になっていて、最後の要素を取り
除いて返すようになっています。
f, n) |
x) |
) |
f) |
) |
) |
) |
f) |
アレイオブジェクトを表示したり文字列に変換したりすると、
array(typecode, initializer)
という形式で表現されま
す。アレイが空の場合、initializer の表示を省略します。アレイが
空でなければ、typecode が 'c'
の場合には文字列に、
それ以外の場合には数値のリストになります。
関数array() をfrom array import array
で import して
いる限り、変換後の文字列に逆クォーテーション(``
)を用いると
元のアレイオブジェクトと同じデータ型と値を持つアレイに逆変換できること
が保証されています。文字列表現の例を以下に示します:
array('l') array('c', 'hello world') array('u', u'hello \textbackslash u2641') array('l', [1, 2, 3, 4, 5]) array('d', [1.0, 2.0, 3.14])
参考: