2017-01-19 2 views
2

Я все еще новичок в Python, поэтому, пожалуйста, несите меня. Я родом из C++ и C#, и я все еще чувствую этот новый язык.Python | Создание аппаратного массива

В настоящее время я использую Python для структур данных. Я использую учебник Rance Necaise (Data Structures and Algorithms using Python). Массивы на Python все еще немного путают меня.

Вот сегмент кода, который я не мог понять на основе книги.

import ctypes 

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

Согласно книге, слоты в основном как указатель

Мой вопрос: что является тип объекта из ArrayType и почему есть конструктор, как ArrayType вызова функции() на следующей строке? Как эти операторы действительно создают объекты с указателем?

+0

Все имена в Python являются ссылками на объекты. –

+0

Итак, ArrayType - это объект какого типа? –

ответ

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] 
Смежные вопросы