如何使用Cython将Python对象转换为C void类型?
目前,当我尝试投射
时,我收到此消息将临时Python对象转换为非数字非Python类型
答案 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