Python Cython简单使用
- 安装Cython
pip install Cython - 使用演示
- 编写Cython版本代码, 文件名:fib_cy.pyx
cpdef int fib_cy(int n): if n <= 1: return n else: return fib_cy(n-1) + fib_cy(n-2)
- 编写Python版本代码,文件名:fib.py
def fib(n): if n <= 1: return n else: return fib(n - 1) + fib(n - 2)
- 编写Cython编译步骤文件,文件名:setup.py
from Cython.Build import cythonize from setuptools import setup setup( ext_modules=cythonize("./fib_cy.pyx"), # cython版本代码路径 )
- 编译cython版本代码
python setup.py build_ext --inplace # 编译完之后,会生成fib_cy.c文件、fib_cy.xxxx.so文件和一个build文件夹。 # 其中.so文件就是要被python导入使用的文件。 - 编写性能测试文件,文件名:test_fib.py
import timeit from fib import fib from fib_cy import fib_cy # type: ignore,这里的意思是从fib_cy.xxx.so中导入fib_cy函数,跟python模块导入一样的。 n = 35 # 选择一个较大的数以便观察时间差异 # 测试纯 Python 版本 py_time = timeit.timeit(f"fib({n})", globals=globals(), number=1) print(f"Pure Python version took: {py_time:.4f} seconds") # 测试 Cython 版本 cy_time = timeit.timeit(f"fib_cy({n})", globals=globals(), number=1) print(f"Cython version took: {cy_time:.4f} seconds") print(f"Speedup: {py_time / cy_time:.2f}x")
- 执行性能测试
python test_fib.py
- 编写Cython版本代码, 文件名:fib_cy.pyx
浙公网安备 33010602011771号