1. 首页
  2. 编程语言
  3. Python
  4. Python源码剖析

Python源码剖析

上传者: 2019-05-01 18:10:32上传 PDF文件 66.25MB 热度 27次
Python源码剖析 第二版 高清重制 Python源码剖析 第二版 高清重制推荐序让我们做得更好Python,我想已经不再是个陌生的词了,越来越多的人开始学习它,使用它,宣传它,甚至用它找到了工作。如果你了解 Python,那么我想问一下,你对它有多了解呢?它是种什么语言?如何实现的?有哪些对象,它们是如何处理的?你了解 Python的虚拟机吗?了解它的运行环境吗?其实作为初学者或只是使用者,你的确不必了解这么多细节的内容,但是探究事物的原理,分析底层细节却也是许多人成为高手、“老鸟”的原因,因为你知道别人不知道的东西,掌握了别人不了解的技术,这些内容使得你的见解、分析,甚至作品都可能超过别人。那么本书就向你提供了一个了解 Python底层细节的机会,你可以沿着作者的思路和角度去体会 Python的工作原理和底层的细节,一点一点地了解 Python源码的精妙之处,有助于更好地掌握Phon并繃写岀高质量的程序。本书的内容深入到 Python的方方面面,像 Python的对象实现机制是如何用C来表现的;对象的特性是如何实现的;对象是如何管理的:不同对象,如int、str、diet、1iat等的处理; Python的虚拟机框架、作用域的实现;运行时环境,pye文件,类机制等。还有一些高级话题,如内存管理,GIL( Global Interpreter Lock)与多线程,模块动态加载等。在接触到本书之前,我已经在作者的Blog上见到过部分内容,那时已经被作者不懈的毅力和深厚的功力折服。说实话,由于经常接触 Python,对于原本熟悉的C语言也越来越陌生,更不要说去“啃" Python.的C代码了。而 Robert chen可以从源码中进行有条理的分析和整理,并终于出版此书。这不仅让人敬佩,更让广大的 Python爱好者受益多多。因此,当出版社希望我为本书怍一个推荐序时,我亳不犹豫地答应下来。第一次见到 Robert chen还是在CPUG的一次会课上,那时 Robert chen给大家带来个主题为“ Python作用域与名字空间”的讲座,让在座的 Pythoner对 Python的作用域机制有了更深入的理解,讲座效果非常好,讨论也很热烈。他从源码的角度讲述了 PythonPython源码剖析深度探索动态语言心技术推荐序一的一些规则,使得大家的理解不再停留在形式上或规则上,而达到了本质或实现的层次,让我们“知其然,更知其所以然”。如果你是一位热心的 Pythoner,想必会知道中文 Python的邮件列表(htp/ groupsgoogle.crv/ group/pythonT-ct),从上,面对有些问题的回复中,你会发现 Robert chen总是从源码及字节码实现的角度来回答问题,非常有说服力。因此当许多 Python爱好者得知Robert chen将出版此书时,都非常盼望,现在这本书终于出版,大家都深感庆幸!本书不仅仅是高水平、高质量的一本书,纵观国内外与 Python相关的书籍,它也是第一本从源码角度写作的书,所以意义非常。目前国内原创的 Python书籍还不多,就我所知国内已经出版的几本 Python方面的书尚不能满足读者需求,而本书应该不会让你失望不过本书应该不是面向初学者的书,因为它涉及了许多较深的内容和知识,建议读者应先掌握像C语言、数据结构、操作系统、編译原理等方面的基础知识,并且具备一定的编程经验,才能更好地理解书的内容再次感谢 Robert Chen带给大家的这份礼物!李迎辉diaodou@gmail. cow2008年春Pymh?源码剖标深度探索动态語言酸心技术推荐序二真的难以想象, Python语言和社区能够发展得如此迅速。在我第一次使用 Python完成我的顶目时,它还不过是一个刚刚在开源社区中起步的新生儿,然后在各方面迅速推广,4月8日, google发布的 App Engine更是让所有的开发人员眼中一亮。相信今后会有更多的开发人员投入到 Python的技术领域中来。记得在2002年时,我使用 Python写了一套大规模的淯息系统,儿位同事分别使用Python、Jawa和C完成了一个异步二进制消息流的客户端和服务器。通过一系列测试,大家惊奇地发现 Python以每秒一倍的数据处理量超过了C写的代码。后来,我的同事细心地査看了 Python的源代码,发现了几种完全不同的操作系统调用方法,以及为提高性能而使用的技巧这也是我第一次开始查看 Python的源代码。最近的一次则是我在 XBayTabl中使用 syncope时,通过阅读 as nicole的源代码排除了一个痛苦bug,轻松地找到了问题的根源,很快就换了一种解决方案来继续我的工作。了解 Python的源代码,我们能获得很多的好处:使用 Python方法提高自己的代码性能和功能:快速地与文档结合,解决问题或是找出方法:;扩展 Python我常将所有的书分为口袋书、马桶书、枕头书。 Robertchen的《 Python源码剖析》,更多讲述的是 CPython中的实现技术和方法。这可以让我们从不同的层面了解 Python简洁背后的机理。我更推荐大家把它当做口袋书,在准备书写 Python扩展前把它作为一本工具书,配合“ Extending and Embedding the Python Interpreter”会让你更容易地完成你的工作。另一方面,当你想使用 Python这种方法解决间题时,这本书也可以成为你的好伙伴,它让你更多更快地了解 Python是怎么做的,从而做得“和 Python一样”当你对 Python的一些问题百思不得其解时,这本书也许可以从不同的方面帮助你了解它最底层发生的故事Python源码剖析深度探索动态语言心技术v推荐序二最后,作为 Python社区的长期参与者,希望更多的代码人不但能使用 Python语言去完成自己的工作,也希望能有更多的人通过这本书成为 Python语言的开发者,更希望中国有越来越多的 Python开发者昔久2008年4月于北京下雨的深夜Pymh?源码剖标深度探索动态語言酸心技术推荐序三非常高兴看到又一本原创的 Python图书出版。说起来,我和Pyψhon还算有一点缘分。在2000年的时候,一次非常偶然的机会我接触到 Python,当时网上的资料非常少,不知天高地厚的我竟冒失地接手了国内第一本引进版 Python图书的合作翻译工怍,往事不堪回首。记得当时经常有人问我 Python能用来做什么·…而我能举出来的例子的确寥寥可数历经数年的发展, Python已今非昔比,各领域都不乏 Python的成功案例。就拿Web方面来说,正如PHP给 Yahoo!带来的巨大动力, Python在新一代的互联网霸主— Google内部早就充当了重要角色,成为排名第三的“官方语言”。而就在前一段时间, Google革命性的 App Engine产品一经推出立即引起了莫大关注,其首选开发语言就是 Python纵观国内技术环境, Python语言仍处于慢热的状态,应用仍然不算广泛。不过我们也已经有称得上比较成功的实现案例了,比如著名的Web2,0的代表站点—豆瓣网即是用Python开发的,创始人杨勃对 Python的效率和优雅赞誉有加。Python乜是权威机构 TIOBE评出的2007年度编程语言,这些“利好”的消息也将进而带动新一轮的技术走向,预示着 Python更大规模的流行时代即将到来。话说回来,“开放平台”在未来几年一定是个不可避免的技术趋势,而跟着大厂商的平台亦步亦趋,照猫画虎,想必也能开发出来紧多的周边应用,但开放未必对所有人都是个好事情,久而久之开发者难免有盲人摸象之感,很难掌握全局,掌握关键架构技术,故深入研究 Python的基础技术仍不可少。这本 &Python源码剖析》的岀版恰是好时机,弥补了国内图书在这方面的空白,此外,作者在 Python领域的精耕细作的研究精神亦值得Python源码剖析深度探索动态语言心技术ⅷi推荐序三研读、分析源代码乃是提高編程技能的一条捷径,庖丁解牛方能刃有余,夯实基础方可枃建高楼大厦读这本 thon源码剖析》就像一次探险之旅,祝煕朋友们能够获得一次愉悦的阅读体验。冯大辉2008年4月于杭州Pymh?源码剖标深度探索动态語言酸心技术言缘起第一次接触 Python,是通过《程序员》杂志上“恶魔吹着笛子来”的系列文章——《自由与繁荣的国度》。但是真正开始使用 Python,还是在进入实验室,开始研究自然语言处理和信息检索之后。自然语言处理其实大部分的时间都在与文本打交道,需要进行大量的对文本分析、统计的工作。开始的时候,我使用的是C艹,因为大学的时候第一门编程语言课就是C,其后转冋C++是很自然的迁移。那时候觉得C++很有一种高贵的感觉,因为C++足够复杂,有足够多的tick,尤其是像模極和泛型编程这样的新鲜玩意儿。掌握这么复杂的东西,也就意味蒼你的脑袋跟这东西一样复杂,这是很能让人虚荣的一件事。C++的复杂性是个仁者见仁,智者见智的话题,但其实回到文本处理这个话题上来说C++的STL在很大程度上已经足够好用了。文本处理不是服务器,所以不需要考虑自己管理内存,不需要考虑这个模式鄢个模式,STL提供了足够多的工具,简单组装一下就可以用了。但俗话说得妇,“不怕不识货,就怕货比货”,当我开始尝试用 Python来进行日常的工作之后,突然发现C++太复杂了。对于 Python,我的感觉只有四个字:摧枯拉朽。我只需要简单地写一个1=[],再也不用写诺如1ist>1=1it>(这样折磨人眼的东西了,这使得代码量急剧减少。对于采用Python这样的英明决策,我想,最满意的就是我的手指头了。随着对 Python的逐渐熟悉,我越来越惊叹于 Python简清的表达,强大的功能。尤其是 Python表现出来的强烈的动态性。比如下面这段与解释器的交互过程>> CLESS A:pass>2>a=A(>>>a,sho[)Python源码剖析深度探索动态语言心技术x前言cabac[m。三 t recent c111a多t):File p line l, in AttributeError: A instance has nc attribute show>>>c18Bdef show(self):print 'i am>>A.Da思画(B,>>>a,aho[)iam已这样的动态能力,在当时简直让我目瞪口呆。从那时候起,我就有了一个强烈的好奇心: Python是怎么实现的?我们知道 Python是用C语言实现的,那这些神奇的动态能力是怎么通过C语言完成的呢?于是我开始上网搜索资料,然而我发现,详细介绍动态语言实现原理的资料根本就没有,只有一些零散的信息散落在各种资料中。再具体到 Python,唯一一篇与 Python实现相关的资料是《 The Architecture of Python》,这是美国一所大学的学生在一次课程设计中产生的文档。这份文档篇幅太短,内容也太简略了,只包含了一些最简单的信息,即使对作为 Python中对象模型关键的 PyObject结构体,也仅仅有一些简单的描述。最要命的是,其研究的对象是 Python2.l,版本太久远了。而我准备开始研究 Python如何实现时, Python己经进化到了24, Python的对象模型已经发生了重大的改变,所以这份文档对于想要深入掌握 Python的实现来说,几乎没有太大作用,让人有一种“食之无味、弃之可惜”的感觉(这份文档目前在Goge上已经搜索不到了)。但不管怎么说,这份文档给了我对于Python实现的一个最初的认识,给了我一个起始点。2004年年末,我开始了探索 Python如何实现的漫漫长征。我选择了编译这个最初的切入点,但是很快我就发现, Python的编译过程中大量地使用了 Python中的一些内置对象,所以我将切入点转向了 Python的对象模型。在完成了 Python对象模型和内建对象的剖析后,又重新转回到編译过程的剖析,我发现 Python的编译过程实际上就是一个标准的编译过程,在仼何一本关于编译原理的书上,你都可以找到它的实现过程。于是,我做了一个决定,不再劊析 Python的编译过程,而是以 Python的编译结果为起点,开始 Python虚拟机的剖析,正因为这样,你在本书中看不到对 Python的编译过程的剖析,不过别着急,你能够看到 Python的編译结果,对于理解 Python虚拟机的实现来说,这个編译结果才是最重要的很快,第一篇关于 PyObject的笔记出炉了,紧接着, Python中最简单的对象——整数对象的笔记也诞生了。到了这个时候,我开始对完成这项工作有信心了,虽然后来的经历证明我当时的信心是多么的虚妄。也是在这个时候,我开始看到 Python实现的精妙之处,完成这项工作的兴趣和动力也越来越强。Pymh?源码剖标深度探索动态語言酸心技术
下载地址
用户评论