Вызов функций Cython C из Python

У меня есть файл Cython именем foo.pyx содержащий следующие функции:

 def add_one(int n): cdef int m = n + 1 return m cdef int c_add_one(int n): return n + 1 

Я создаю этот файл pyx с помощью cython -a foo.pyx и могу:

 >>> import foo >>> foo.add_one(5) 6 >>> foo.c_add_one(5) AttributeError: 'module' object has no attribute 'c_add_one' 

Похоже, я не могу вызвать c_add_one из python. В чем преимущества объявления функции с cdef ?

One Solution collect form web for “Вызов функций Cython C из Python”

  1. Скорость : Cython и C могут вызывать функции cdef и cpdef намного быстрее, чем обычные функции. Регулярные функции def – это полномасштабные объекты Python. Они требуют подсчета ссылок, GIL и т. Д.
  2. Инкапсуляция : если функция объявлена cdef , она не будет доступна пользователям Python. Это полезно, если функция никогда не предназначалась для общественного потребления (например, потому что она не проверяет ее параметры или не связана с деталями реализации, которые могут измениться в будущем). Конечно, пользователи могут обойти это через C / Cython, но делать это скорее из-за хлопот, чем большинство будет беспокоиться. Таким образом, это похоже на двузначное обозначение имени.
  • Могу ли я использовать этот параллельный шаблон итератора с Cython?
  • Как упаковать связанную DLL и файл pyd в один автономный файл pyd?
  • Как я могу управлять модулем / именем класса cythf cython?
  • Вызовите код python c c через cython
  • Использование setuptools для создания пакета cython, вызывающего внешнюю библиотеку C
  • Cython не может найти файл общих объектов
  • Cython: ошибка добавления комплекса в double
  • Написание расширения Python в Go (Golang)
  • Cython скомпилировал расширение C: ImportError: динамический модуль не определяет функцию init
  • Вектор C ++ для Python 3.3
  • Cython: cimport и import numpy как (оба) np
  • Python - лучший язык программирования в мире.