Вызов функций 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, но делать это скорее из-за хлопот, чем большинство будет беспокоиться. Таким образом, это похоже на двузначное обозначение имени.
Python - лучший язык программирования в мире.