版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Python简介Python是一种简单易学,功能强大的解释型编程语言,它有简洁明了的语 法,高效率的高层数据结构,能够简单而有效地实现面向对象编程,特别适用于 快速应用程序开发,也可以用来开发大规模的重要的商业应用。Python是一个 理想的脚本语言。Python免费开源,可移植到多种操作系统,只要避免使用依赖于特定操作 系统的特性,Python程序无需修改就可以在各种平台上面运行。Python拥有现代编程语言所具有的一切强大功能,Python标准库十分庞大, 可以帮助开发者处理各种工作,如:图形用户界面、文件处理、多媒体、正则表 达式、文档生成、单元测试、线程、数据库、网络通讯、网页浏览器、
2、CGI、FTP、 电子邮件、XML、HTML、WAV文件、密码系统、Tk和其他与系统有关的操作。 只要安装了 Python,这些功能都是可用的除了标准库以外,还有许多其他高质 量的库,如wxPython、Twisted和Python图形库等等数不胜数。Python容易扩展和嵌入。Python提供的许多标准模块支持C或者C+接口。 Python和C可以一起工作,它可以嵌入到C或者C+的应用程序当中,因此可 用Python语言为应用程序提供脚本接口,由于支持跨语言开发,可用Python 设计概念化应用程序,并逐步移植到C,使用前不必用C重写应用程序。(Jython 使Python可以和Java 一
3、起工作,使开发者可以在Python里面调Java的包,也 可以在Java里面使用Python的对象。还有更妙的,由于Jython的解释器完全用 Java编写,因此可以在支持Java的任何平台上部署Python程序,甚至WEB浏 览器也可以直接运行Python脚本。)提出问题在某个C+应用程序中,我们用一组插件来实现一些具有统一接口的功能, 我们使用Python来代替动态链接库形式的插件,这样可以方便地根据需求的变 化改写脚本代码,而不是必须重新编译链接二进制的动态链接库。Python强大 的功能足以胜任,但是有一些操作系统特定的功能需要用C+来实现,再由 Python调用。所以,最基础地,我们
4、需要做到:1.把Python嵌入到C+应用程序中,在C+程序中调用Python函数和 获得变量的值;2.用C+为Python编写扩展模块(动态链接库),在Python程序中调用C+开发的扩展功能函数。常用的Python/C API介绍下面是例子中用到的几个Python/C API的简要介绍及示例代码。注意,这 并不是这些函数的详细介绍,而仅仅是我们所用到的功能简介,更详细内容请参 考文档1、2、3、4。打开 Microsoft Visual Studio .NET 2003,新建一个控制台程序,#include,并在main函数里加入示例代码。/先定义一些变量char *cstr;PyObje
5、ct *pstr, *pmod, *pdict;PyObject *pfunc, *pargs;void Py_Initialize()初始化Python解释器,在C+程序中使用其它Python/C API之前,必须 调用此函数,如果调用失败,将产生一个致命的错误。例: Py_Initialize();int PyRun_SimpleString( const char *command)执行一段Python代码,就好象是在main 函数里面执行一样。例:PyRun_SimpleString(from time import time,ctimen” print Today is,ctime(
6、time()n);PyObject* PyImport_ImportModule( char *name)导入一个Python模块,参数name可以是*.py文件的文件名。相当于Python 内建函数_import_() 。例:pmod = PyImport_ImportModule(mymod); /mymod.pyPyObject* PyModule_GetDict( PyObject *module)相当于Python模块对象的dict_属性,得到模块名称空间下的字典对象。例:pdict = PyModule_GetDict(pmod);PyObject* PyRun_String( c
7、onst char *str, int start, PyObject *globals, PyObject *locals)执行一段Python代码。pstr = PyRun_String(message”, Py_eval_input, pdict, pdict);int PyArg_Parse( PyObject *args, char *format, .)解构Python数据为C的类型,这样C程序中才可以使用Python里的数据。例:/* convert to C and print it*/PyArg_Parse(pstr, s, &cstr); printf(%sn, cstr)
8、;PyObject* PyObject_GetAttrString( PyObject *o, char *attr_name)返回模块对象o中的attr_name 属性或函数,相当于Python中表达式语句: o.attr_name。例:/* to call mymod.transform(mymod.message) */ pfunc = PyObject_GetAttrString(pmod, transform);PyObject* Py_BuildValue( char *format, .)构建一个参数列表,把C类型转换为Python对象,使Python可以使用C类型 数据,例:c
9、str=this is hjss test, to uppercase;pargs = Py_BuildValue(s), cstr);PyEval_CallObject(PyObject* pfunc, PyObject* pargs)此函数有两个参数,都指向Python对象指针,pfunc是要调用的Python函 数,通常可用PyObject_GetAttrString() 获得;pargs是函数的参数列表,通常可 用 Py_BuildValue()构建。例:pstr = PyEval_CallObject(pfunc, pargs);PyArg_Parse(pstr, s, &cstr)
10、; printf(%sn, cstr);void Py_Finalize()关闭Python解释器,释放解释器所占用的资源。例:Py_Finalize();Python2.4环境没有提供调试版本的Python24d.lib,所以上述示例在release 模式下编译。编译完成后,把可行文件和附2给出的mymod.py文件放在一起, 再点击即可运行。为了简化编程,附3给出了 simplepy.h。这样,调用 mymod.transform 变成如下 形式:/#include”simplepy.h”CSimplepy py;py.ImportModule(mymod);std:string str二
11、py.CallObject(transform,this is hjss test, to uppercase);printf(%sn”, str.c_str();接下来,我们来用C+为Python编写扩展模块(动态链接库),并在Python 程序中调用C+开发的扩展功能函数。生成一个取名为pyUtil的Win32 DLL工 程,除了 pyUtil.cpp文件以外,从工程中移除所有其它文件,并填入如下的代码:/ pyUtil.cpp#ifdef PYUTIL_EXPORTS#define PYUTIL_API _declspec(dllexport)#else#define PYUTIL_AP
12、I _declspec(dllimport)#endif#include#include#includeBOOL APIENTRY DllMain( HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved?)(switch (ul_reason_for_call)(case DLL_PROCESS_ATTACH:case DLL_THREAD_ATTACH:case DLL_THREAD_DETACH:case DLL_PROCESS_DETACH:break;return TRUE;std:string Recognise_Img(
13、const std:string url)(/返回结果return 从dll中返回的数据.:+url;static PyObject* Recognise(PyObject *self, PyObject *args)(const char *url;std:string sts;if (!PyArg_ParseTuple(args, s, &url) return NULL;sts = Recognise_Img(url);return Py_BuildValue(s, sts.c_str();static PyMethodDef AllMyMethods口 = (Recognise, Re
14、cognise, METH_VARARGS,/ 暴露给 Python 的 函数(NULL,NULL/* Sentinel */;extern C PYUTIL_API void initpyUtil() ( PyObject *m, *d;m = Py_InitModule(pyUtil, AllMyMethods); /初始化本模块, 并暴露函数d = PyModule_GetDict(m);在Python代码中调用这个动态链接库: import pyUtilresult = pyUtil.Recognise(input url of specific data) print the res
15、ult is: + result用C+为Python写扩展时,如果您愿意使用Boost.Python 库的话,开发过 程会变得更开心J,要编写一个与上述pyUtil同样功能的动态链接库,只需把文 件内容替换为下面的代码。当然,编译需要boost_python.lib 支持,运行需要 boost_python.dll 支持。 #include #include using namespace boost:python;#pragma comment(lib, boost_python.lib) std:string strtmp;char const* Recognise(const char*
16、 url) (strtmp =从dll中返回的数据.:; strtmp+=url;return strtmp.c_str();BOOST_PYTHON_MODULE(pyUtil)(def(Recognise, Recognise);所有示例都在 Microsoft Windows XP Professional + Microsoft VisualStudio .NET 2003 + Python2.4 环境下测试通过,本文所用的Boost库为1.33 版本。参考资料1 Python Documentation Release 2.4.1. 2005.3.30,如果您以默认方式安装了 Pyt
17、hon2.4,那么该文档的位置在C:Program FilesPython24DocPython24.chm ;2 Michael Dawson. Python Programming for the Absolute Beginner. TOC o 1-5 h z Premier Press. 2003;3 Mark Lutz. Programming Python, 2nd Edition. OReilly. 2001.3;4 Mark Hammond, Andy Robinson. Python Programming on Win32.OReilly. 2000.1;Python 主页
18、:;Boost 库主面: ;附 1 text.txtthis is test text in text.txt.附 2 mymod.pyimport stringmessage = ,original string,message =message+message msg_error=try:text_file = open(text.txt,r) whole_thing = text_file.read() print whole_thing text_file.close()except lOError, (errno, strerror):print I/O error(%s): %s
19、% (errno, strerror) def transform(input):#input = string.replace(input, life, Python) return string.upper(input)def change_msg(nul):global message #如果没有此行,message是函数里头的局部变量 message=string changed,return messagedef r_file(nul):return whole_thingdef get_msg(nul):return message附 3 simplepy.h#ifndef _SI
20、MPLEPY_H_#define _SIMPLEPY_H_/ simplepy.h v1.0/ Purpose: facilities for Embedded Python./ by hujinshan 2005 年 9 月 2 日 9:13:02#includeusing std:string;#include/ / Purpose: ease the job to embed Python into C+ applications/ by hujinshan 2005 年 9 月 2 日 9:13:18/ class CSimplepy / : private noncopyable(p
21、ublic:/constructorCSimplepy()(Py_Initialize();pstr=NULL, pmod=NULL, pdict=NULL;pfunc=NULL, pargs=NULL;/destructorvirtual CSimplepy()(Py_Finalize();/import the user modulebool ImportModule(const char* mod_name)(try(pmod =PyImport_ImportModule(const_cast(mod_name);if(pmod=NULL)return false;pdict = PyM
22、odule_GetDict(pmod);catch(.)(return false;if(pmod!=NULL & pdict!二NULL)return true;elsereturn false;/Executes the Python source code from command in the _main_ module./If _main_ does not already exist, it is created./Returns 0 on success or -1 if an exception was raised./If there was an error, there
23、is no way to get the exception Run_SimpleString(const char* str)(return PyRun_SimpleString(const_cast(str);/PyRun_String(message, Py_eval_input, pdict, pdict);/Execute Python source code from str in the context specified by the dictionaries globals./The parameter start specifies the
24、start token that should be used to parse the source code./Returns the result of executing the code as a Python object, or NULL if an exception was raised.string Run_String(const char* str)(char *cstr;pstr = PyRun_String(str, Py_eval_input, pdict, pdict);if(pstr=NULL)throw (when Run_String, there is an exception was raised by Python enviro
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 22517.1-2024体育场地使用要求及检验方法第1部分:综合体育场馆木地板场地
- 2024年度企业租赁与经营权转让合同:商场内独立店铺的经营权交易2篇
- 2024年度童鞋跨界合作购销合同
- 手车位转让协议 3篇
- 排水工程承包合同
- 化工设计:第12章 设计报告和设计说明书
- 个人与公司买卖合同范本完整版
- 2024版自动驾驶技术研发与应用合同2篇
- 2024年度吊车租赁合同的合同变更条件及程序3篇
- 最好的励志课件
- 2023年英语专业四级单选及答案详解
- YY 0572-2015血液透析及相关治疗用水
- GB/T 3475-2008船用柴油机调速系统技术要求和试验方法
- 小学语文课程标准(2023年版)
- 化工行业安全隐患排查表
- 第四章茶树繁殖
- 第四章 制度安排与公共伦理.教学教程课件电子教案
- 五子棋盘A3打印
- 现代康复治疗技术考试题库(含答案)
- 四年级数学上册《运算律》整理与复习课件
- 杓状软骨脱位的原因及处理课件
评论
0/150
提交评论