8.6. array —有效的数字数组

该模块定义了一个对象类型,该对象类型可以紧凑地表示一个基本值数组:字符,整数,浮点数。数组是序列类型,其行为与列表非常相似,不同之处在于数组中存储的对象类型受到约束。类型是在对象创建时使用类型代码指定的,该代码是单个字符。定义了以下类型代码:

Type code C Type Python Type 最小大小(以字节为单位)
'c' char character 1
'b' signed char int 1
'B' unsigned char int 1
'u' Py_UNICODE Unicode character 2 (请参见 Comments)
'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

Note

'u'类型代码对应于 Python 的 unicode 字符。在狭窄的 Unicode 版本中,这是 2 个字节,在广泛的版本中,这是 4 个字节。

值的实际表示形式由机器体系结构(严格来说,由 C 实现)确定。可以passitemsize属性访问实际大小。检索到'L''I'项时存储的值将表示为 Python 长整数,因为 Python 的纯整数类型不能表示 C 的完整无符号(长)整数范围。

该模块定义以下类型:

在版本 2.4 中进行了更改:以前,仅接受列表或字符串。

如果提供了列表或字符串,则将初始化程序传递给新数组的fromlist()fromstring()fromunicode()方法(请参见下文),以将初始项添加到数组。否则,将可迭代的初始值设定项传递给extend()方法。

数组对象支持索引,切片,串联和乘法的普通序列操作。使用切片分配时,分配的值必须是具有相同类型代码的数组对象;在所有其他情况下,将引发TypeError。数组对象还实现了缓冲区接口,并且可以在支持缓冲区对象的任何地方使用。

还支持以下数据项和方法:

Note

当使用以 C 或 C 编写的代码使用数组对象(有效利用此信息的唯一方法)时,使用数组对象支持的缓冲区接口更有意义。维护此方法是为了实现向后兼容,因此在新代码中应避免使用此方法。缓冲区接口记录在缓冲区和 Memoryview 对象中。

在版本 2.4 中更改:以前,该参数只能是另一个数组。

从文件对象* f 中读取 n 个项(作为机器值),并将它们附加到数组的末尾。如果少于 n *个项目可用,则引发EOFError,但仍然将可用项目插入到数组中。 * f *必须是真实的内置文件对象;使用read()方法的其他操作将无法执行。

将所有项目(作为机器值)写入文件对象* f *。

当数组对象被打印或转换为字符串时,它表示为array(typecode, initializer)。如果数组为空,则Ellipsis* initializer ;否则,如果 typecode *为'c',则为字符串;否则为数字列表。只要使用from array import array导入了array类,就可以保证使用eval()将字符串转换回具有相同类型和值的数组。例子:

array('l')
array('c', 'hello world')
array('u', u'hello \u2641')
array('l', [1, 2, 3, 4, 5])
array('d', [1.0, 2.0, 3.14])

See also

  • Module struct

  • 打包和解压缩异构二进制数据。

  • Module xdrlib

  • 在某些远程过程调用系统中使用的打包和拆包外部数据表示(XDR)数据。

  • 数值 Python 文档

  • Numeric Python 扩展(NumPy)定义了另一种数组类型。有关数值 Python 的更多信息,请参见http://www.numpy.org/

首页