Python |创建硬件阵列

时间:2017-01-19 19:30:04

标签: python arrays data-structures

我还是Python的新手,所以请耐心等待。我最初来自C ++和C#,我仍然掌握这种新语言。

我目前正在使用Python进行数据结构。我正在使用Rance Necaise的教科书(使用Python的数据结构和算法)。 Python中的数组仍然让我感到困惑。

这是我根据本书无法理解的代码段。

import ctypes

ArrayType = ctypes.c_int * 5
slots = ArrayType()

根据这本书,插槽基本上就像一个指针

我的问题是ArrayType的对象类型是什么,为什么在下一行有类似函数调用ArrayType()的构造函数?这些语句实际上如何形成类似指针的对象插槽?

1 个答案:

答案 0 :(得分:0)

ArrayType不创建指针,它会创建一个对象。

在Python中,所有名称都是对象的引用,因此slots是对对象的引用(在C ++术语中,引用本质上是指针,它们永远不能为空。)

请参阅the ctypes documentation关于阵列。

c_int的类型是PyCSimpleType

>>> import ctypes

>>> type(ctypes.c_int)
_ctypes.PyCSimpleType

示例中ArrayType的类型为PyCArrayType

>>> ArrayType = ctypes.c_int * 5
>>> type(ArrayType)
_ctypes.PyCArrayType

PyCArrayType是一个可以创建对象的类。它创建的数组类型为c_long_Array_5,最多只能容纳5个值:

>>> ArrayType(1, 2, 3, 4, 5, 6)
Traceback (most recent call last):
IndexError: invalid index

如果创建的数组少于5个,则默认为零:

>>> slots = ArrayType(1, 2, 3)
>>> list(slots)
[1, 2, 3, 0, 0]

因此,您的示例将创建一个初始化为零的数组:

>>> list(ArrayType())
[0, 0, 0, 0, 0]