我有一个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
Run Code Online (Sandbox Code Playgroud)
我使用构建此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'
Run Code Online (Sandbox Code Playgroud)
所以看起来我无法c_add_one从python 调用.使用声明函数有什么好处cdef?
cdef和cpdef运行.常规def函数是完整的Python对象.它们需要引用计数,GIL等.cdef,它将不会向Python用户公开.如果该函数从未用于公共消费(例如,因为它不检查其参数,或者与将来可能改变的实现细节有关),这是有益的.当然,用户仍然可以通过C/Cython来规避这一点,但这样做比大多数人都会烦恼更麻烦.这样,它类似于双下划线名称修改.