Как преобразовать объект Python в C void с помощью Cython?Преобразование объекта Python в C void type
В настоящее время я получаю это сообщение, когда я пытаюсь бросить
Кастинг временного объекта Python для нечислового непитоновского типа
Как преобразовать объект Python в C void с помощью Cython?Преобразование объекта Python в C void type
В настоящее время я получаю это сообщение, когда я пытаюсь бросить
Кастинг временного объекта Python для нечислового непитоновского типа
Вы можете:
def run():
pyobj = 'abc'
pyobj_void_star = <void *>pyobj
Это может быть сделаны как это:
1. Бросок от Python до C
Если вы на самом деле означало void *
это будет:
some_pyobj = "abc"
cdef void *ptr
ptr = <void *>some_pyobj
Если вы имели в виду PyObject *
это будет:
cdef PyObject *ptr
ptr = <PyObject *>some_pyobj # Cast from Python object to C pointer
Затем со стороны C, то PyObject struct
можно, включив Python.h
.
Вот ссылка (из object.h
Python включаемый файл):
/* Nothing is actually declared to be a PyObject, but every pointer to
* a Python object can be cast to a PyObject*. This is inheritance built
* by hand. Similarly every pointer to a variable-size Python object can,
* in addition, be cast to PyVarObject*.
*/
typedef struct _object {
PyObject_HEAD
} PyObject;
2. отлиты из C в Python
Он работает в обоих направлениях, а это означает, что следующий также возможно:
cdef PyObject *ptr
ptr = <PyObject *>some_pyobj
cdef object some_other_pyobj
some_other_pyobj = <object>ptr # Cast from C pointer to Python object
Почему бы просто не использовать базовый 'PyObject *'? –
Я предполагаю, что вы имеете в виду 'void *', а не 'void'. –