1.引言/动机
1.1什么是扩展
一般来说,所有能被整合或导入到其他Python脚本的代码,都可以称为扩展。您可以用纯Python来写扩展,也可以用C和C++之类的编译型语言来写扩展(或者也可以用Java给Jython写扩展,也可以用C#或Visual Basic.NET给IronPython写扩展)。
Python的一大特点就是,扩展和解释器之间的交互方式与普通的Python模块完全一样。Python在设计之初就考虑到要让模块的导入机制足够抽象,抽象到让使用模块的代码无法了解到模块的具体实现细节。除非那个程序员在磁盘中搜索这个模块文件,否则,他就连这个模块到底是用Python写的,还是用某种编译语言写的都分辨不出来。
1.2 为什么要扩展Python
一般编程语言都不具备可扩展性,你只能使用已有的功能,而不能为语言增加新功能。Python等语言是第一批提供可扩展性的语言。那么,为什么我们会想要扩展像Python这种已经很完善的语言呢?有以下几点好理由。
- 添加/额外的(非Python)功能
扩展Python的一个原因就是对一些新功能的需要,而Python语言的核心部分并没有提供这些功能。这时,通过纯Python代码或者编译扩展都可以做到。但是有些情况,比如创建新的数据类型或者将Python嵌入到其他已经存在的应用程序中,则必须得编译。
- 性能瓶颈的效率提升
众所周知,由于解释型的语言是在运行时动态地翻译解释代码,这导致其运行速度比编译型的语言慢。一般说来,把所有代码都放到扩展中,可以提升软件的整体性能。但有时由于时间与精力有限,这样做并不划算。
- 保持专有源代码私密
创建扩展的另一个很重要的原因是脚本语言都有一个共同的缺陷,那就是所有的脚本语言执行的都是源代码,这样一来源代码的保密性便无从谈起了。
把一部分代码从Python转到编译语言就可以保持专有源代码私密,因为你只要发布二进制文件就可以了。编译后的文件相对来说更不容易被反向工程出来。因此,代码能实现保密。尤其是涉及到特殊的算法、加密方法及软件安全的时候
2 创建Python扩展
为Python创建扩展需要3个主要的步骤:
1.创建应用程序代码;
2.利用样板来包装代码;
3.编译与测试。