- 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
                     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
                您可能关注的文档
最近下载
- 整本书阅读《平凡的世界》同步练习(含解析)中职语文高教版(2023)基础模块上册.docx VIP
- 异位妊娠病人术后护理.pptx
- 高教版中职语文基础模块 上册第四单元整本书阅读《平凡的世界》阅读指导教学设计.docx VIP
- 苏教版高中化学必修第一册全册教学课件.pptx
- 高中理综高三模拟高考(全国Ⅱ卷)实战演练卷——新疆高考模拟3月卷理科综合能力.doc VIP
- 关于加强金属非金属地下矿山外包工程指导意见.doc VIP
- 关于加强金属非金属地下矿山外包工程安全管理的若干规定.docx VIP
- 主新闻中心介绍.doc VIP
- 2023-2024学年江苏省南京市玄武区九年级(上)英语期中试题和答案.pdf VIP
- GoPro Cameras HERO13 Black Product Manuals 中文简体说明书用户手册.pdf
 原创力文档
原创力文档 
                        

文档评论(0)