2017-07-27 88 views
-1

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

%load_ext cython 
%%cython 
cdef class A: 
    pass 

cdef struct person: 
    int num 
    object info 

cdef person someone 
    p1.idd = 94113 
    p1.info = A() 

我将不胜感激帮助我这一点。
其实我试图用自行设计结构更换蟒蛇dict名单在我的代码,因为我读here,它不可能与蟒蛇http://stardict.sourceforge.net/Dictionaries.php下载使用nogil。
如果有人能够找到某种方式来解决问题的代码尽可能快地运行,这将不胜感激。
谢谢。

+1

我不认为结构可以容纳Python对象(比如模块),因为Cython应该如何为它们生成引用计数代码并不明显。无论如何,您需要使用gil才能访问该模块。 – DavidW

回答

1

唯一可以进入C定义的东西 - 什么cdef描述 - 是C类型。

像这样的事情将是一个开始,如果你想使用结构保持:

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

ctypedef struct person: 
    int num 
    Info info 

cdef class Person: 
    cdef person my_struct 

为了简单,因为你的目标是定义一个类,并使用Python中的对象,无论如何,可以只是做一个cdef类并让Cython为您生成结构。

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

    <..>