Cython的学习方法

时间:2023-01-22 19:32:20

在认识Cython之前,我已经用swig写Python扩展好长一段时间了。

 

虽然用swig为写Python扩展提供了很大的方便,但是其易用性却仍然不是很好:

 

        1、很多情况下要自己转换输入输出参数,如封装的一个C函数的参数中既是输入又是输出的情况,又如输入参数是一个结构体,而且结构体里的成员变量里又有指针,都必须自己写额外的代码去转换,而swig自定义的参数转换的方式真的是很难用。

        2、在封装参数中有回调函数指针类型的函数时则更是让人头疼,这不是三言两语就可以说得完的,所以这里不作细讲,没有尝试过的可以尝试一下,就会和我有一样的感受了。

 

当时就有一个想法,如果能有一门语言,能够融合Python的易用性,C/C++的高效性,能用多好。 

 

只是没有想到,这种语言早就有了,正静静的等着你去发现。

 

但是我认识Cython有点戏剧性,第一次看到网上介绍的Cython时,没有引起注意。

 

又有一次在网上看到关于它的介绍,认真看了下,才突然发现这就是自己一直想要的工具,再试用了下,更是爱不释手,从此和swig说拜拜了。

 

我当时有种感觉是,如果自己能早点认识到这个工具,那能节省我多少时间和精力啊。

 

 

 

好,讲了下我认识Cython的过程,接下来看下怎么去学习。

 

首先,你要知道如何用Python 的C API通过C语言来写Python扩展,在Python的官方文档中有一节《Extending and Embedding the Python Interpreter》,里面讲得比较清楚,不知道的可以先看下文档,先练练手。

 

再者,用Cython写Python的扩展,必须有C和C++的基础,如果没有这个基础,建议还是先学一下C和C++的基本语法,对C/C++不是很了解的也建议复习一下它们的基础知识,要不然会造成头脑的混乱。

 

Python和C/C++语法难免有冲突的地方,所以Cython的语法是一个Python语法和C/C++语法的折中方案。

 

在Cython语言里,你即可以定义一个Python的类,函数,以及创建变量,又可以定义一个C++类,C函数以及C类型以及结构体。

 

学习Cython有了C/C++的基础,接下来就是要搞懂Cython里的函数和变量定义和C/C++的区别。 

 

编程作为一门应用学科,学习秘诀就是于边学边练,学用结合。

 

相信一旦你掌握Cython这个工具之后,就会象是给自己的双臂插上了翅膀,对于你写Python的扩展将带来很大的方便。

 

好,希望自己写了这么多不都是废话,对于那些对Python感兴趣,又想学着写些Python扩展的人有些帮助,有兴趣的可以开始看我的博客中的相关文章:

 

Cython基础--Cython入门

Cython基础--Cython的类型

Cython基础--Cython的函数

Cython基础--C结构体,枚举,以及常量在Cython中的定义和使用

Cython基础--Cython的语句和表达式

Cython基础--Cython的类

Cython进阶--用Cython封装Callback函数

Cython进阶--用Cython封装Callback函数(续)

 

(完)