易截截图软件、单文件、免安装、纯绿色、仅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
&


相关文档:

Microsoft Visual C++

   不知道怎么突然对VC编程感兴趣,其实我都不知道VC是个哈,就知道是程就像我现在学的最简单的PHP差不多吧,在PHP上咱也是个菜,还没学好就想学VC,我真是合自已没折,话不多话以下内容我是从谷歌里搜的,百度里有的,不是我写的东东,只是看了一哈在找个BLOG,转一下下~
一、VC是什么?学VC是学什么?
  首先V ......

C代码语言转VB代码的问题:

谁能帮我把这段代码转成Vb的代码,不胜感激,谢谢!
void CTempDlg::OnOK()
{
  UpdateData(1);
  int nlen=m_edit1.GetLength();
  char *username=m_edit1.GetBuffer(nlen);//定义一个新字符串username,长度为nlen,并将m_edit1中的字符串一个个放入到username数组中
  char strA[]="90123456 ......

ubuntu下解决 C compiler cannot create executables

       今天,在Ubuntu上安装Python遇到了问题: C compiler cannot create executables。这应该是编译环境出现了问题。在网上搜索了一下,解决方法如下:
       sudo apt-get install build-essential即可。
......

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号