Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在cython中将模块作为struct的参数传递?_Python_Dictionary_Struct_Cython - Fatal编程技术网

Python 如何在cython中将模块作为struct的参数传递?

Python 如何在cython中将模块作为struct的参数传递?,python,dictionary,struct,cython,Python,Dictionary,Struct,Cython,我没有使用cython的经验,只是开始学习。我试图将模块作为参数传递给结构,但我不知道如何传递? 这是我在Jupyter笔记本中尝试的示例代码: %load_ext cython %%cython cdef class A: pass cdef struct person: int num object info cdef person someone p1.idd = 94113 p1.info = A() 如果您能帮我,我将不胜感激。 实际上,我

我没有使用cython的经验,只是开始学习。我试图将模块作为参数传递给结构,但我不知道如何传递? 这是我在Jupyter笔记本中尝试的示例代码:

%load_ext cython
%%cython
cdef class A:
    pass

cdef struct person:
    int num
    object info

cdef person someone
    p1.idd = 94113
    p1.info = A()
如果您能帮我,我将不胜感激。
实际上,我正试图用自己设计的结构来替换代码中的python
dict
列表
,因为在我阅读时,不可能将nogil与python dict一起使用。
如果有人能找到某种方法来克服这个问题,让代码尽可能快地运行,那将是非常感谢的。

谢谢。

唯一可以进入C定义的东西是C类型,
cdef
所描述的

如果您想继续使用结构,这将是一个开始:

ctypedef struct Info:
    char[256] address
    char[256] name
    <..>

ctypedef struct person:
    int num
    Info info

cdef class Person:
    cdef person my_struct
ctypedef结构信息:
字符[256]地址
字符[256]名称
ctypedef结构人:
整数
信息
cdef类人员:
cdef人员我的结构
为了简单起见,而且由于您的目标是在Python中定义一个类并使用该对象,因此可以创建一个cdef类并让Cython为您生成结构

cdef class Person:
    cdef char[256] name
    cdef char[256] address
    cdef int num

    <..>
cdef类人员:
cdef char[256]名称
cdef字符[256]地址
cdef int num

我认为结构不能容纳Python对象(如模块),因为Cython应该如何为它们生成引用计数代码并不明显。在任何情况下,您都需要gil来访问模块。