将Python对象转换为C void类型

将Python对象转换为C void类型,python,c,cython,Python,C,Cython,如何使用Cython将Python对象转换为C void类型 目前,我在尝试施放时收到此消息 将临时Python对象强制转换为非数字非Python类型您可以: def run(): pyobj = 'abc' pyobj_void_star = <void *>pyobj def run(): pyobj='abc' pyobj_void_star=pyobj 可以这样做: 1。从Python转换为C 如果你真的是指void*,那么: some_pyobj = "abc

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

目前,我在尝试施放时收到此消息

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

您可以:

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

可以这样做:

1。从Python转换为C

如果你真的是指
void*
,那么:

some_pyobj = "abc"
cdef void *ptr
ptr = <void *>some_pyobj
cdef PyObject *ptr
ptr = <PyObject *>some_pyobj           # Cast from Python object to C pointer
然后,从C端,通过包含
Python.h
可以使用
PyObject结构

以下是参考(来自
object.h
Python包含文件):

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
cdef-PyObject*ptr
ptr=一些_pyobj
cdef对象一些其他对象
some_other_pyobj=ptr#从C指针强制转换到Python对象

为什么不直接使用底层的
PyObject*
?我想你的意思是
void*
,而不是
void
cdef PyObject *ptr
ptr = <PyObject *>some_pyobj
cdef object some_other_pyobj
some_other_pyobj = <object>ptr          # Cast from C pointer to Python object