このモジュールは基本的な値(文字、整数、浮動小数点数)の配列を効率よく表現できる新しいオブジェクト型を定義します。配列はシーケンス型であり、格納されるオブジェクトの型に制限があることを除けば、リストとまったく同じように振る舞います。オブジェクト生成時に一文字の型コードを用いて型を指定します。次の型コードが定義されています:
型コード | 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]) |
配列オブジェクトは、添字付け、スライス、連結および反復といった通常のシーケンス演算をサポートします。スライス代入を使うとき、代入される値は同じ方コードの配列オブジェクトでなければなりません。他すべての場合には、TypeErrorが発生します。配列オブジェクトはバッファインターフェイスを実装しており、バッファオブジェクトがサポートされるところではどこでも使われます。
次のデータアイテムとメソッドもサポートされます:
x) |
) |
(address, length)
を返します。array.buffer_info()[1] * array.itemsize
で、バイト単位のメモリバッファの大きさを計算できます。メモリアドレスを必要とする、例えばioctl()操作のような低レベルな(そして、本質的に危険な)I/Oインタフェースを使って作業する場合に、ときどき便利です。その配列が存在し、長さを変える演算が行われない限り、返される数は有効です。
注意: CあるいはC++で書かれたコードから配列オブジェクトを使う(この情報を効率的に使うたった一つの方法)ときは、配列オブジェクトがサポートするバッファインターフェイスを使う方がより理にかなっています。このメソッドは後方互換性のために保守されており、新しいコードでの使用は避けるべきです。バッファインターフェイスはPython/C APIリファレンスマニュアルで文書化されています。
) |
x) |
a) |
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
である限り、文字列は逆クォーテーション(``
)を用いて同じデータ型と値を持つ配列に逆変換できることが保証されています。例:
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])
参考資料: