本文主要研究的是使用C++扩展Python的功能的相关问题,具体如下。
创新互联是一家专注于网站设计制作、网站设计与策划设计,泰山网站建设哪家好?创新互联做网站,专注于网站建设10多年,网设计领域的专业建站公司;建站业务涵盖:泰山等地区。泰山做网站价格咨询:028-86922220环境
VS2005Python2.5.4Windows7(32位)
简介
长话短说,这里说的扩展Python功能与直接用其它语言写一个动态链接库,然后让Python来调用有点不一样(虽然本质是一样的)。而是指使用Python本身提供的API,使用C++来对Python进行功能性扩展,可以这样理解,使用更高效的语言实现一些算法计算等等需要更高执行效率的核心(或者需要与系统进行密切交互的)模块,然后让Python像调用内建标准库的方式来调用这些模块,听起来是不是很诱人?!在软件技术高速发展的今天,借助几种计算机语言来实现一个系统的例子数不胜数,目的不外乎就是性能和便利的平衡。譬如本文要讨论的使用C++来扩展Python就是Python和C++的一种巧妙的有机结合,好处不言而喻,既可以获得和C++相似的执行性能,又可以利用Python的开发灵活性。由于Python本身是使用C实现的,二者结合起来还是比较容易的。
基本流程
本文不适合这样的读者——对Python完全不了解或者对C\C++完全不了解,道理你们懂的。另外就是Python里面有6种基本数据类型。你需要了解如何在C和Python之间对这些类型进行转化(这不在本文讨论范围,可以参考[1])。
言归正传,感觉前面说得太多了,实际上很简单,因此我决定少说多做。一个C++的Python扩展模块至少应该有导出函数,方法列表和初始化函数三个部分。我们用VS2005这个强大的工具开工!一般来说,你应该建一个Dll工程(至于使用exe来扩展Python可以不可以,暂时还没研究过)。下面按部就班的说明(关键说明在注释部分)。
一、初始化函数
//------------------------------------------------------------------------- // 函数 : initPyExt // 功能 : 初始化函数 // 返回值 :PyMODINIT_FUNC // 附注 : 注意,这个函数的名字不能改动。必须是init+模块名字, // 我们的模块名字是PyExt,所以函数名是initPyExt。Python在导入 // 我们的PyExt模块时,会找到这个函数,并调用。这个函数实现的 // 功能很简单,通过调用Py_InitModule将模块名字和映射表结合起 // 来,它的意思是说PyExt这个模块使用PyExtMethods这个映射表。 //------------------------------------------------------------------------- PyMODINIT_FUNCinitPyExt() { Py_InitModule("PyExt",PyExtMethods); }
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款