我还是Python的新手,所以请耐心等待。我最初来自C ++和C#,我仍然掌握这种新语言。
我目前正在使用Python进行数据结构。我正在使用Rance Necaise的教科书(使用Python的数据结构和算法)。 Python中的数组仍然让我感到困惑。
这是我根据本书无法理解的代码段。
import ctypes
ArrayType = ctypes.c_int * 5
slots = ArrayType()
根据这本书,插槽基本上就像一个指针
我的问题是ArrayType的对象类型是什么,为什么在下一行有类似函数调用ArrayType()的构造函数?这些语句实际上如何形成类似指针的对象插槽?
答案 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]