Cython 的 .pyx 和 .pxd 文件介绍

10 阅读1分钟

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 级别的定义