第二十二章扩展Python.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第二十二章扩展Python

 PAGE 636  TITLE \* MERGEFORMAT iR6Gw  STYLEREF \l 标题 2 \* MERGEFORMAT 22.4 练习  PAGE 637 第22章 扩展Python 本章主题 ? 引言/动机 ? 扩展Python ? 创建应用程序代码 ? 用样板包装你的代码 ? 编译 ? 导入并测试 ? 引用计数 ? 线程和GIL ? 相关话题 在 本章中,我们将讨论如何编写扩展代码并将它们的功能整合到Python编程环境中来。首先我们会给出这样做的原因,然后一步步地教您如何做。应当指出的是,虽然大部分Python的扩展都是用C语言写的,并且下面的所有样例代码也都是由纯C语言写的,但请放心,这些代码很容易就可以移植到C++中。 22.1 引言/动机 22.1.1 什么是扩展 一般来说,所有能被整合或导入到其他Python脚本的代码,都可以称为扩展。您可以用纯Python来写扩展,也可以用C和C++之类的编译型语言来写扩展(或者也可以用Java给Jython写扩展,也可以用C#或Visual Basic.NET给IronPython写扩展)。 Python的一大特点就是,扩展和解释器之间的交互方式与普通的Python模块完全一样。Python在设计之初就考虑到要让模块的导入机制足够抽象,抽象到让使用模块的代码无法了解到模块的具体实现细节。除非那个程序员在磁盘中搜索这个模块文件,否则,他就连这个模块到底是用Python写的,还是用某种编译语言写的都分辨不出来。 核心笔记:在不同平台上创建扩展我们要注意的是,如果你曾自己编译过Python解释器,那么,在这样的环境中,扩展一般都是可以使用的。自己手动编译扩展,和获取扩展的二进制文件是有些不同的。虽然自己编译比简单地下载安装复杂一些,但由此得来的好处就是,你可以自由选择你想使用的Python版本。虽然本章中的例子都是在Unix系统中开发的(一般的Unix中都自带编译器)。但只要你能使用C/C++(或Java)的编译器并且在C/C++(或Java)中有Python的开发环境,那唯一的区别只是怎样来编译而已。无论在哪一个平台上,真正起作用的代码都是一样的。如果你在Win32平台上进行开发,你需要有Visual C++开发环境。Python的发布包中自带了7.1版本的项目文件。当然,你也可以使??老版本的VC。想了解更多的关于如何在Win32上开发扩展的信息,你可以访问如下网页: /ext/building-on-windows.html 警告:就算是相同架构的两台电脑之间最好也不要互相共享二进制文件。最好是在各自的电脑上编译Python和扩展,因为有时就算是编译器或是CPU之间的些许差异,也会导致代码不能正常工作。 22.1.2 为什么要扩展Python 纵观软件工程的历史,编程语言都不具备可扩展性,你只能使用已有的功能,而不能为语言增加新功能。现如今的编程环境中,可定制性也是一个很大的卖点,它可以促进代码的复用。TCL和Python等语言是第一批提供可扩展性的语言。那么,为什么我们会想要扩展像Python这种已经很完善的语言呢?有以下几点好理由。 ? 添加/额外的(非Python)功能 扩展Python的一个原因就是对一些新功能的需要,而Python语言的核心部分并没有提供这些功能。这时,通过纯Python代码或者编译扩展都可以做到。但是有些情况,比如创建新的数据类型或者将Python嵌入到其他已经存在的应用程序中,则必须得编译。 ? 性能瓶颈的效率提升 众所周知,由于解释型的语言是在运行时动态地翻译解释代码,这导致其运行速度比编译型的语言慢。一般说来,把所有代码都放到扩展中,可以提升软件的整体性能。但有时由于时间与精力有限,这样做并不划算。 通常,先做一个简单的代码性能测试,看看瓶颈在哪里,然后把瓶颈部分在扩展中实现会是一个比较简单有效的做法。效果立竿见影不说,而且还不用花费太多的时间与精力。 ? 保持专有源代码私密 创建扩展的另一个很重要的原因是脚本语言都有一个共同的缺陷,那就是所有的脚本语言执行的都是源代码,这样一来源代码的保密性便无从谈起了。 把一部分代码从Python转到编译语言就可以保持专有源代码私密,因为你只要发布二进制文件就可以了。编译后的文件相对来说更不容易被反向工程出来。因此,代码能实现保密。尤其是涉及到特殊的算法、加密方法及软件安全的时候,这样做就显得非常至关重要了。 另一种对代码保密的方法是只发布预编译后的.pyc文件。这是介于发布源代码(.py文件)和把代码移植到扩展这两种方法之间的一种较好的折中方法。 22.2 创建Python扩展 为Python创建扩展需要3

文档评论(0)

ktj823 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档