易截截图软件、单文件、免安装、纯绿色、仅160KB

Python的C/C++扩展

  Python

C/C++
扩展
                         
By phidoit@gmail.com
 
可扩展性是
Python
的一大特色,一方面,由于
Python
是解释执行的,这导致运行速度会比编译型语言慢,因此可以通过使用
C/C++
重写核心部分代码以解决性能上的瓶颈
(
程序
90%
的时间再运行
10%
的代码
)
;另一方面,可以通过扩展,达到添加整合一些额外的功能以及保持专有源代码的目的。在本文接下来的部分中我们将讨论如何编写
C/C++
扩展代码,并使用它们的功能。
我们要建立的是一个可以在
Python
内运行的
C/C++
模块,因此需要解决如何使
C
代码和
Python
代码能够进行交互以及数据共享。扩展是通过为
C
代码编写包装函数
(
类似适配器
)
实现双向交互和数据共享的。
 
一.一般的包装模式
 
每一个包装函数主要做三件事:
1.
把输入的
Python
对象转换为
C/C++
对象;
2.
调用
C/C++
函数;
3.
转换
C/C++
函数处理的输出结果为
Python
对象,并返回;
 
先用一个简单样例描述模块大体的过程:
 //wrap.cpp
//1.C代码
#include "Python.h"
int add(int arg1, int arg2)
{
return arg1 + arg2;
}
//2.add的包装函数:
static PyObject* wrap_add(PyObject *self, PyObject *args)
{
//把输入的Python对象转换为C/C++能识别的数据
int arg1, arg2;
if(!PyArg_ParseTuple(args, "ii", &arg1, &arg2))
return NULL;
//调用C/C++函数,得到结果
int result = add(arg1,arg2);
//把得到的结果包装成Python对象,并返回
return (PyObject*)Py_BuildValue("i", result);
}
//3.为模块添加PyMethodDef方法数组
static PyMethodDef wrap_methods[] ={
{"add", wrap_add, METH_VARARGS},
{NULL, NULL}
};
//4.增加模块初始化函数InitModule
PyMODINIT_FUNC initwrap (void)
{
Py_InitModule("wrap ", wrap_methods);
}

    把上面的代码编译,生成
wrap.pyd

    
 
Visual Studio 2005
编译方法参考:
http://blog.csdn.net/solo_lxy/archive/2007/07/20/1700515.aspx
&


相关文档:

C++前三次作业总结

1,在头文件中定义了类,在大括号后面一定要有分号!C++中把类型定义也作为一个语句。
class A{
A(){ cout << "hello world " << endl;}
};
2,if后面的大括号问题
用一段JAVA小程序说明一下下:
boolean value = true;
System.out.println("开始测试一和测试二");
if(value == true)
{
 &nbs ......

VC++怎样生成DLL

---- 在用PowerBuilder开发应用程序时,经常需要调用动态链接库DLL,本文介绍了动态链接库的基本特点,给出了VC++建立DLL以及在PowerBuilder中调用VC++创建的DLL函数的编程实例,实现了通过DLL连接PowerBuilder和VC++编制的不同程序的目的。
一、 DLL概述:
---- 动态链接库(Dynamic-Link Library),简称DLL,是基于Win ......

应用python编写shell脚本

转载自
http://blog.163.com/skynjl/blog/static/603053922009127101558356/
 
 
今天同事叫我编写一个shell脚本。话说,虽然我受*nix的影响甚深,但是对于*nix 里随处可见的sh脚本却是讨厌之极。为什么讨厌呢?首先是因为sh脚本那莫名其妙的语法,感觉就像随写随扔的程序,完全没有任何美感可言。其次是sh脚 ......

Python3在ubuntu环境下的安装

       首先下载最新版本的Python,在这里我的版本是Python3.1.1。然后就是安装,切换到Python的文件目录下:
./configure
make
make test
sudo make install
      在这里可能会遇到几个问题,第一个是在./configure时,可能会出现C compiler cannot create ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号