Cython 是一种编程语言,允许将 Python 代码和 C 代码混合使用,以提高性能。.pyx
和 .pxd
文件是 Cython 工作流中的两种重要文件类型。
.pyx 文件
作用:
- 包含 Cython 的实现代码
- 是主要的源代码文件,类似于 Python 的
.py
文件 - 可以混合使用 Python 和 C 语法
特点:
- 包含可执行代码
- 可以导入和使用 Python 模块
- 可以定义类、函数和变量
- 支持类型声明,如
cdef int x = 0
- 编译后生成 C 或 C++ 代码,然后编译为扩展模块
示例:
# example.pyx
cdef int add(int x, int y):
return x + y
def calculate(x, y):
return add(x, y)
.pxd 文件
作用:
- 声明 Cython 模块的外部 C 接口
- 相当于 C 语言中的头文件 (.h)
- 用于共享声明和类型定义
特点:
- 只包含声明,不包含实现代码
- 可以声明 cdef 函数、类和变量
- 用于模块之间共享 C 级别的定义
- 允许其他 Cython 模块访问模块中 cdef 声明的对象
示例:
# example.pxd
cdef int add(int x, int y)
cdef class MyClass:
cdef:
int value
double rate
cdef double calculate(self)
两者关系
.pyx
文件实现功能,.pxd
文件声明接口- 如果
example.pyx
有对应的example.pxd
,则.pxd
中的声明必须在.pyx
文件中实现 .pxd
文件可以用于在不同的 Cython 模块间共享 C 级别的声明.pxd
文件也可用于包装 C 库的头文件
使用场景
- 性能优化:当需要加速 Python 代码时
- 封装 C 库:当需要为 Python 提供 C 库接口时
- C 级别共享:当需要在多个 Cython 模块间共享 C 级别的定义