1 Cython 介绍
- Cython 是一种编程语言,用于编写 C 扩展的 Python 模块。它结合了 Python 的易用性和 C 的执行效率,旨在提高特定类型的任务的性能,特别是涉及大量数值计算的任务。
1.2 几个特征
1.2.1 Python 语法的基础
- Cython 的大部分语法非常类似于 Python
- 可以在 Cython 代码中使用标准的 Python 语句和结构,比如条件语句、循环、函数、类等。
1.2.2 C 语言特性的集成
- Cython 扩展了 Python 语法,允许直接在代码中使用 C 数据类型(如
int
,double
)、结构体、指针等 - 可以通过
cdef
关键字声明 C 类型的变量和函数,这些声明的变量和函数将以 C 语言的速度执行(也就是比Python快的速度)
1.2.3 性能优化
- Cython 允许直接调用 C 库函数,这对于性能优化非常重要。
- 通过使用 Cython 编译器,Python 代码(特别是涉及大量数值计算的部分)可以被编译成 C 代码,从而大幅提高运行速度。
1.2.4 兼容性:
- Cython 代码可以轻松地与 Python 代码和库集成。你可以在 Cython 模块中导入和使用 Python 模块,反之亦然。
- Cython 也支持调用和扩展现有的 C 代码,这使得它在整合遗留代码方面非常有用。
2 基本实现
2.1 创建一个pyx项目(hello.pyx)
def hello():
print("Hello world")
2.2 创建一个setup.py
from distutils.core import setup
from Cython.Build import cythonize
'''
cythonize 函数用于编译 Cython 源代码到 C 语言代码
'''
setup(name='Hello world app',
ext_modules=cythonize("hello.pyx"))
'''
调用了 setup 函数
__name='Hello world app':这是项目的名称,在这个例子中被命名为 "Hello world app”
ext_modules=cythonize("hello.pyx"):这里指定了扩展模块。cythonize 函数被用来编译指定的 Cython 源文件(在这个例子中是 hello.pyx)
'''
使用setup.py,就免去了gcc手工编译的部分
2.3 编译项目
命令行中输入如下指令
python setup.py build_ext --inplace
——生成hello.c 和一个.so文件
2.4 在python中调用 编译后的.so文件
创建test.py文件,并调用之
import hello
# 这个import会先找hello.py,找不到就会找hello.so
hello.hello()
python test.py
返回内容:Hello world