2013-07-29 3 views
3

Давайте скрипт foo.pyx с функцией в нем:Как импортировать функцию Cython в Cython сценарий

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»

Edit: Я бы лучше добавить, что этот пример будет работать нормально, если я поместите обе функции в один и тот же файл.

ответ

0

Решение в конечном итоге должно было создать дополнительный файл .pxd, что-то очень похожее на классический заголовок .h-файла на C. Он хранит объявления функций и когда вызывается cimport, он находится в этом файле, где он ищет функции и структуры.

Так быть конкретным, все, что мне нужно было сделать, чтобы создать файл, содержащий noo.pxd:

cdef trol(int * i) 

и чем мы можем просто cimport этой функции от foo.pyx позвонив

from noo cimport trol 
1

Это похоже на то очевидное, чтобы попробовать, но вы попробуйте:

from noo cimport trol 

Если вы используете import вместо cimport, я думаю, что он будет пытаться бросить trol как функции питона и генерировать ошибку вам» re получение.

Смежные вопросы