Капсулы¶Capsules
Обратитесь к Предоставление C API для модуля расширения для получения дополнительной информации об использовании этих объектов.
Новое в версии 3.1.
-
PyCapsule¶ Этот подтип
PyObjectпредставляет собой непрозрачное значение, полезное для C модулей расширения, которым нужно передать непрозрачное значение (в видеvoid*указателя) через код Python в другой код C. Часто используется, чтобы сделать указатель на функцию C , определённую в одном модуле, доступной для других модулей, так что обычный механизм импорта может использоваться для доступа к C API, определённым в динамически загружаемых модулях.
-
PyCapsule_Destructor¶ Тип колбэка-деструктора для капсулы. Определяется как:
typedef void (*PyCapsule_Destructor)(PyObject *);
См.
PyCapsule_New()для описания семантики колбэков PyCapsule_Destructor.
-
int
PyCapsule_CheckExact(PyObject *p)¶ Возвращает истину, если аргумент является
PyCapsule. Эта функция всегда выполняется успешно.
-
PyObject*
PyCapsule_New(void *pointer, const char *name, PyCapsule_Destructor destructor)¶ - Возвращаемое значение: новая ссылка.
Создаёт
PyCapsule, инкапсулирующий указатель. Аргумент указатель не может бытьNULL.При ошибке устанавливает исключение и возвращает
NULL.Строка имя может быть либо
NULL, либо указателем на допустимую C-строку. Если неNULL, эта строка должна пережить капсулу. (Хотя разрешается освободить её внутри деструктора.)Если аргумент деструктор не равен
NULL, то он будет вызван с капсулой в качестве аргумента при её уничтожении.Если эта капсула будет храниться как атрибут модуля, имя следует указать как
modulename.attributename. Это позволит другим модулям импортировать капсулу с помощьюPyCapsule_Import().
-
void*
PyCapsule_GetPointer(PyObject *capsule, const char *name)¶ Извлекает указатель, хранящийся в капсуле. При ошибке устанавливает исключение и возвращает
NULL.Параметр имя должен точно совпадать с именем, хранящимся в капсуле. Если имя, хранящееся в капсуле, равно
NULL, то переданное имя также должно бытьNULL. Python использует C-функциюstrcmp()для сравнения имён капсул.
-
PyCapsule_Destructor
PyCapsule_GetDestructor(PyObject *capsule)¶ Возвращает текущий деструктор, хранящийся в капсуле. При ошибке устанавливает исключение и возвращает
NULL.Капсула может иметь деструктор
NULL. Это делает код возвратаNULLнесколько неоднозначным; используйтеPyCapsule_IsValid()илиPyErr_Occurred()для устранения неоднозначности.
-
void*
PyCapsule_GetContext(PyObject *capsule)¶ Возвращает текущий контекст, хранящийся в капсуле. В случае ошибки устанавливает исключение и возвращает
NULL.Капсула может иметь контекст
NULL. Это делает код возвратаNULLнесколько неоднозначным; используйтеPyCapsule_IsValid()илиPyErr_Occurred()для устранения неоднозначности.
-
const char*
PyCapsule_GetName(PyObject *capsule)¶ Возвращает текущее имя, хранящееся в капсуле. В случае ошибки устанавливает исключение и возвращает
NULL.Капсула может иметь имя
NULL. Это делает код возвратаNULLнесколько неоднозначным; используйтеPyCapsule_IsValid()илиPyErr_Occurred()для устранения неоднозначности.
-
void*
PyCapsule_Import(const char *name, int no_block)¶ Импортирует указатель на объект C из атрибута-капсулы в модуле. Параметр name должен задавать полное имя атрибута, как в
module.attribute. name, хранящееся в капсуле, должно точно совпадать с этой строкой. Если no_block равно true, импорт модуля выполняется без блокировки (с использованиемPyImport_ImportModuleNoBlock()). Если no_block равно false, импорт модуля выполняется обычным способом (с использованиемPyImport_ImportModule()).Возвращает внутренний указатель капсулы в случае успеха. В случае ошибки устанавливает исключение и возвращает
NULL.
-
int
PyCapsule_IsValid(PyObject *capsule, const char *name)¶ Определяет, является ли capsule допустимой капсулой. Допустимая капсула не является
NULL, проходитPyCapsule_CheckExact(), содержит ненулевойNULLуказатель, и её внутреннее имя совпадает с параметром name. (См.PyCapsule_GetPointer()для информации о том, как сравниваются имена капсул.)Другими словами, если
PyCapsule_IsValid()возвращает истинное значение, вызовы любых функций доступа (любой функции, начинающейся сPyCapsule_Get()) гарантированно завершаются успешно.Возвращает ненулевое значение, если объект допустим и соответствует переданному имени. В противном случае возвращает
0. Эта функция не завершается ошибкой.
-
int
PyCapsule_SetContext(PyObject *capsule, void *context)¶ Устанавливает указатель контекста внутри capsule в значение context.
Возвращает
0в случае успеха. В случае неудачи возвращает ненулевое значение и устанавливает исключение.
-
int
PyCapsule_SetDestructor(PyObject *capsule, PyCapsule_Destructor destructor)¶ Устанавливает деструктор внутри capsule в значение destructor.
Возвращает
0в случае успеха. В случае неудачи возвращает ненулевое значение и устанавливает исключение.
-
int
PyCapsule_SetName(PyObject *capsule, const char *name)¶ Устанавливает имя внутри capsule в значение name. Если не
NULL, имя должно пережить капсулу. Если предыдущее name, хранящееся в капсуле, не былоNULL, попытка его освобождения не предпринимается.Возвращает
0в случае успеха. В случае неудачи возвращает ненулевое значение и устанавливает исключение.