2017-01-07 2 views
0

Если у меня есть функция C void foo() во внешней библиотеке, я могу выполнить его в module1.pyx вCython: Создание внешней функции C доступна для других модулей Cython

cdef extern from "fooHeader.h": 
    void foo(); 
... 
foo() 

Однако, я могу сделать эту функцию общественности для других модулей Cython, без использования функции обертки?

Например, с помощью module1.pxd:

cdef extern void foo() 

не делает функция доступна в module2.pyx:

from module1 cimport foo 
foo() 

, который прерывается с неопределенной ошибки символа.

ответ

0

Типичный способ заключается в создании обертки, поскольку вы обычно хотите перехватывать типы и такие, когда вы подвергаете такие функции Код Python. С верхней части моей головы, вероятно, самый простой способ для вас, чтобы сделать то, что вы после использования Cython в инклюднике центр с .pxi файлов:

https://cython.readthedocs.io/en/latest/src/reference/language_basics.html#include-file

отрывок из ссылки:

Как его использовать?

  • Включи .pxi файл включаемого заявления, как: «включает spamstuff.pxi»
  • включаемое заявление может появиться в любом месте в файле Cython и на любом уровне отступа
  • Код в .pxi файл должен быть укоренен с нулевым уровнем отступов.
  • Входящий код сам может содержать другие включенные операторы.

Таким образом, вы бы поставить cdef extern <...> материал в файл .pxi и включают в себя, что во всех ваших пользователей.

(Примечание стороны:.. Я не помню, можно ли подвергать Экстерн модули через .pxd интерфейс файл в или нет, что мощи также работать, но я не проверял)

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