Есть ли способ изменить размер списка Python с помощью API-интерфейса Python-C?
Мое C-приложение загружает dll интерпретатора Python и вызывает функцию list = PyList_New(len)
создать новый список python размера 'len'.
Два вопроса:
1. Что произойдет, если я позвоню PyList_Append(list, item)
больше, чем len
раз? Я предполагаю, что это должно вызвать исключение. Правильно ли мое понимание?
2. Что важнее, мой второй вопрос: есть ли способ изменить размер списка? Я посмотрел на API C по адресу: https://docs.python.org/2/c-api/list.html, но не смог найти такой API. Любые предложения / комментарии / обходной путь?
Контекст моего вопроса заключается в том, что мне нужно создать список намного раньше, чем когда известны элементы списка и их количество.
1 ответ
PyList_New
создает список воли NULL
указатели. Вы должны установить все эти указатели, используя PyList_SetItem
перед отправкой списка обратно в Python или вызовом каких-либо функций Python на нем.
PyList_Append
(а также PyList_Insert
) действительно просто эквивалентны звонкам somelist.append
(а также somelist.insert
) из Python. Они изменяют размер списка для вас. Я не уверен на 100%, если они NULL
элементы, так что, вероятно, лучше не вызывать их в список, из которого вы сделали PyList_New
и что вы еще не полностью заполнены. Это те функции, которые вы должны использовать. Вы также можете позвонить list.extend
добавить несколько элементов в список одновременно - прямого доступа к нему через C API нет, но вы можете вызвать его через PyObject_CallMethodObjArgs
или похожие.
Внутри список распределяет больше места, чем ему нужно, ему нужно только перераспределять время от времени. Там нет никакого способа для вас, чтобы контролировать это.