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

问题是,我现在如何将 trol 函数从文件 noo.pyx 导入到 foo.pyx,这样我就可以在 hello 函数中使用它了。

这只是模型示例,但我认为,它足够公平地说明问题。

我试过简单

from noo import trol

但这会引发“无法将 'int *' 转换为 Python 对象”

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

4

2 回答 2

1

这似乎是显而易见的尝试,但您是否尝试过:

from noo cimport trol

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

于 2013-07-29T16:57:29.637 回答
0

最终的解决方案是创建额外的.pxd文件,该文件与 C 中的经典头 .h 文件非常相似。它存储函数声明,当调用 cimport 时,它会在此文件中查找函数和结构。

所以具体来说,我需要做的就是创建文件 noo.pxd 包含:

cdef trol(int * i)

并且我们可以通过调用简单地从 foo.pyx 导入这个函数

from noo cimport trol
于 2013-08-13T08:41:51.257 回答