除了使用.pyx源文件之外,Cython还使用类似C头文件的.pxd文件——它们包含了只适用于Cython模块的Cython声明。我们使用cimport关键字来将一个pxd文件导入pyx模块中。
pxd文件有很多用例:
-
可以用它们来共享外部C声明。
-
它们可以包含适用于C编译器的内联函数。这些函数应该被标明为
inline,例如:
cdef inline int int_min(int a, int b):
return b if b < a else a- 当附带一个同名
pyx文件时,它们向Cython模块提供一个Cython接口,以便其他Cython模块可以使用比Python更高效的协议与之通信。
在我们的积分例子中,我们可以把它分解成这样的pxd文件:
- 添加一个
cmath.pxd函数定义了Cmath.h头文件中可用的C函数,例如sin。然后我们就可以简单地在integrate.pyx中from cmath cimport sin。 - 添加一个
integrate.pxd,这样,用Cython编写的其他模块就可以定义快速自定义函数来做积分。
cdef class Function:
cpdef evaluate(self, double x)
cpdef integrate(Function f, double a,
double b, int N)注意,如果你有一个带有属性的cdef类,那么属性必须在类声明pxd文件中声明(如果你使用了),而不是在pyx文件中声明。编译器会告诉你具体情况。