将Python对象转换为C void类型

时间:2013-06-03 22:55:48

标签: python c cython

如何使用Cython将Python对象转换为C void类型?

目前,当我尝试投射

时,我收到此消息

将临时Python对象转换为非数字非Python类型

2 个答案:

答案 0 :(得分:10)

这可以这样做:

<强> 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

答案 1 :(得分:1)

你可以:

def run():
   pyobj = 'abc'
   pyobj_void_star = <void *>pyobj