如何将Cython函数导入到Cython脚本中

3

让我们有一个名为foo.pyx的脚本,其中包含一个函数:

def hello():
    cdef int* i = <int *> malloc(sizeof(int))
    i[0] = 1
    trol(i)
    print i

使用函数 noo.pyx 进行脚本编写:

cdef trol(int * i):
    i[0] = 42

问题是,我现在该如何从文件 noo.pyx 导入 trol 函数到 foo.pyx 中,以便在 hello 函数中使用它。
这只是一个模型示例,但我认为它足够清楚地说明了问题。
我尝试了简单的方法。
from noo import trol

但是这会抛出"无法将'int *'转换为Python对象"的错误。

编辑:我最好补充一下,如果我将这两个函数放在同一个文件中,这个例子将正常工作。

2个回答

1
解决方案最终是创建了一个额外的.pxd文件,它类似于C语言中的经典头文件.h。它存储函数声明,当调用cimport时,它会在这个文件中查找函数和结构体。
因此,具体来说,我所需要做的就是创建一个名为noo.pxd的文件,其中包含:
cdef trol(int * i)

然后我们可以通过调用来自foo.pyx的cimport函数来简单导入此函数。
from noo cimport trol

1
这似乎是一个显而易见的尝试,但你是否尝试过:
from noo cimport trol

如果您使用import而不是cimport,我认为它会尝试将trol转换为Python函数并生成您得到的错误。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接