从 Python 调用 Cython C 函数

2024-03-13

我有一个Cython http://cython.org/文件名为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来自蟒蛇。使用声明函数有什么优点cdef?


  1. Speed: Cython 和 C 可以调用cdef and cpdef功能比常规功能快得多。常规的def函数是成熟的 Python 对象。它们需要引用计数、GIL 等。
  2. 封装: 如果声明了一个函数cdef,它不会暴露给Python用户。如果该函数从未打算供公众使用(例如,因为它不检查其参数,或与将来可能会更改的实现细节相关),那么这是有益的。当然,用户仍然可以通过 C/Cython 来规避这个问题,但这样做比大多数人更麻烦。这样,它类似于双下划线名称修饰。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 Python 调用 Cython C 函数 的相关文章

随机推荐