ctypes.Array(*args)
:Рекомендуемый способ создания конкретных типов массивов - это умножение любого типа данных ctypes
на положительное целое число. Кроме того, можно создать подкласс этого типа и определить переменные класса [Array._length_
и Array._type_
.
Элементы массива могут быть прочитаны и присвоены с использованием стандартного доступа по индексам и фрагментам среза. При взятии среза - результирующий объект сам по себе не является массивом.
Конструкторы подкласса массива принимают позиционные аргументы, используемые для инициализации элементов по порядку.
Переменные класса ctypes.Array
Array._length_
:Переменная Array._length_
это положительное целое число, определяющее количество элементов в массиве.
Индексы вне допустимого диапазона приводят к ошибке IndexError
. Будет возвращено функцией len()
.
Array._type_
:Переменная Array._type_
задает тип каждого элемента в массиве.
ctypes
.Массивы - это последовательности, содержащие фиксированное количество экземпляров одного типа.
Рекомендуемый способ создания типов массивов - умножение типа данных на положительное целое число:
TenPointsArrayType = POINT * 10
Пример "надуманного" типа и структуры, в которую входит массив из 4-х объектов POINT()
:
>>> from ctypes import * >>> class POINT(Structure): ... _fields_ = ("x", c_int), ("y", c_int) ... >>> class MyStruct(Structure): ... _fields_ = [("a", c_int), ... ("b", c_float), ... ("point_array", POINT * 4)] >>> print(len(MyStruct().point_array)) # 4
Экземпляры создаются обычным способом, вызывая класс:
>>> from ctypes import * >>> class POINT(Structure): ... _fields_ = ("x", c_int), ("y", c_int) ... >>> TenPointsArrayType = POINT * 5 >>> arr = TenPointsArrayType() >>> for pt in arr: ... print(pt.x, pt.y) ... # 0 0 # 0 0 # 0 0 # 0 0 # 0 0
Приведенный выше код вывел серию строк 0 0, поскольку содержимое массива инициализировано нулями.
Также могут быть указаны правильные значения (int
), с которыми массив инициализируется:
>>> from ctypes import * >>> TenIntegers = c_int * 10 >>> ii = TenIntegers(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) >>> print(ii) # <c_long_Array_10 object at 0x...> >>> for i in ii: print(i, end=" ") ... # 1 2 3 4 5 6 7 8 9 10