- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
 - 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
 - 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
 - 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
 - 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
 - 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
 - 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
 
 
        查看更多 
         
       
 
      
        Python的C语言扩展
       
 
       
        一、简介 Python 是一门功能强大的高级脚本语言,它的强大不仅表现在其自身的功能上,而且 还表现在其良好的可扩展性上,正因如此,Python 已经开始受到越来越多人的青睐, 并且被屡屡成功地应用于各类大型软件系统的开发过程中。 与其它普通脚本语言有所不同,Python 程序员可以借助Python 语言提供的API,使 用C 或者C++来对Python 进行功能性扩展,从而即可以利用Python 方便灵活的语 法和功能,又可以获得与C 或者C++几乎相同的执行性能。执行速度慢是几乎所有脚 本语言都具有的共性,也是倍受人们指责的一个重要因素,Python 则通过与C 语言 的有机结合巧妙地解决了这一问题,从而使脚本语言的应用范围得到了很大扩展。 在用Python 开发实际软件系统时,很多时候都需要使用C/C++来对Python 进行扩 展。最常见的情况是目前已经存在一个用C 编写的库,需要在Python 语言中使用该 库的某些功能,此时就可以借助Python 提供的扩展功能来实现。此外,由于Python 从本质上讲还是一种脚本语言,某些功能用Python 实现可能很难满足实际软件系统 对执行效率的要求,此时也可以借助Python 提供的扩展功能,将这些关键代码段用C 或者C++实现,从而提供程序的执行性能。 本文主要介绍Python 提供的C 语言扩展接口,以及如何使用这些接口和C/C++语 言来对Python 进行功能性扩展,并辅以具体的实例讲述如何实现Python 的功能扩 展。 二、Python 的C 语言接口 Python 是用C 语言实现的一种脚本语言,本身具有优良的开放性和可扩展性,并提 供了方便灵活的应用程序接口(API),从而使得C/C++程序员能够在各个级别上对 Python 解释器的功能进行扩展。在使用C/C++对Python 进行功能扩展之前,必须 首先掌握Python 解释所提供的C 语言接口。 2.1 Python 对象(PyObject) Python 是一门面向对象的脚本语言,所有的对象在Python 解释器中都被表示成 PyObject,PyObject 结构包含Python 对象的所有成员指针,并且对Python 对象 的类型信息和引用计数进行维护。在进行Python 的扩展编程时,一旦要在C 或者C++ 中对Python 对象进行处理,就意味着要维护一个PyObject 结构。 在Python 的C 语言扩展接口中,大部分函数都有一个或者多个参数为PyObject 指 针类型,并且返回值也大都为PyObject 指针。 2.2 引用计数 为了简化内存管理,Python 通过引用计数机制实现了自动的垃圾回收功能,Python 中的每个对象都有一个引用计数,用来计数该对象在不同场所分别被引用了多少次。 每当引用一次Python 对象,相应的引用计数就增 1,每当消毁一次Python 对象,则 相应的引用就减 1,只有当引用计数为零时,才真正从内存中删除Python 对象。 下面的例子说明了Python 解释器如何利用引用计数来对Pyhon 对象进行管理: 例1:refcount.py class refcount: # etc. r1 = refcount() # 引用计数为1 r2 = r1 # 引用计数为2 del(r1) # 引用计数为1 del(r2) # 引用计数为0,删除对象 在C/C++中处理Python 对象时,对引用计数进行正确的维护是一个关键问题,处理 不好将很容易产生内存泄漏。Python 的C 语言接口提供了一些宏来对引用计数进行 维护,最常见的是用Py_INCREF()来增加使Python 对象的引用计数增1,用 Py_DECREF()来使Python 对象的引用计数减1。 2.3 数据类型 Python 定义了六种数据类型:整型、浮点型、字符串、元组、列表和字典,在使用C 语言对Python 进行功能扩展时,首先要了解如何在C 和Python 的数据类型间进行 转化。 2.3.1 整型、浮点型和字符串 在Python 的C 语言扩展中要用到整型、浮点型和字符串这三种数据类型时相对比较 简单,只需要知道如何生成和维护它们就可以了。下面的例子给出了如何在C 语言中 使用Python 的这三种数据类型: 例2:typeifs.c // build an integer PyObject* pInt = Py_BuildValue(i, 2003); assert(PyInt_Check(p
       
 
      
有哪些信誉好的足球投注网站
 
      
      
文档评论(0)