您的位置:首页 > 编程语言 > Python开发

<PY><core python programming笔记>C22 扩展Python

2014-05-27 22:16 465 查看

C22 扩展Python

22.1动机

能被整合或者导入到其他Python脚本的代码,都可以称为扩展。

比如一些C、C++、J***A(Jython)、C#(IronPython)、VB.NET(IronPython)代码

关键在导入机制足够抽象

可以手动编译,也可以去下载,最好是在自己电脑上编译,因为就算同架构电脑也不一定编译出相同的二进制文件

http://docs.python.org/ext/building-on-windows.html

扩展的必要性:

添加额外的功能(核心Python并没有提供的功能,可以使用纯Python代码和编译扩展实现)

性能瓶颈的提升(解释型语言的动态翻译导致运行速度比编译型语言慢,做一个简单的代码性能测试,看看瓶颈在哪里

,然后把瓶颈部分在扩展中做)

保持专有源代码私密(脚本语言的共同缺陷是执行的都是源代码)

22.2创建Python扩展

1.创建应用程序代码

2.利用样板来包装代码:

包含Python头文件

为每个模块的每一个函数增加一个形如 PyObject *Module_fuc()的包装函数

int ---PyArg_ParseTuple() 把Python传过来的参数转为C

int ---PyArg_ParseTupleAndKeywords() 转的同时解析关键字参数

PyObject*---Py_BuildValue() 把C的数据转为Python的一个或一组对象然后返回之

str --char* None---NULL int---int long---long str---char float---double

complex---Py_Complex* (any)---PyObject* str---PyStringObject

为每个模块增加一个一个形如PyMethodDef ModuleMethods[]的数组

增加模块初始化函数 void initModule()

3.编译与测试

setup.py编译连接

导入模块

测试

22.3相关话题

1.SWING

按SWING的格式写文件就好了,不用像上面那么麻烦

2.Pyrex

可以让你只取混合语言的优点,最终生成C代码,当然可以编译成普通的扩展

3.Psyco

不用改C代码,自动把字节码转成本地代码,可以检查各部分运行时间,优化瓶颈

可以自动优化

4.嵌入

把Python的解释器包装到C程序中
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: