在认识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基础--C结构体,枚举,以及常量在Cython中的定义和使用
Cython进阶--用Cython封装Callback函数(续)
(完)