您的浏览历史

Python源码剖析--深度探索动态语言核心技术

促销活动
精彩评论

基本信息

  • 作者: 陈儒    [作译者介绍]
  • 出版社:电子工业出版社
  • ISBN:9787121068744
  • 上架时间:2008-7-21
  • 出版日期:2008 年6月
  • 开本:16开
  • 页码:480
  • 版次:1-1
  • 所属分类: 计算机 > 软件与程序设计 >

    Python


编辑推荐

◆一本深入剖析Python具体实现的著作.
◆内容新鲜,采用最新的Python语言版本(2.5)
◆大量的图表形象地展示Python内部的运作机理..
◆在原理介绍的同时,带领读者一起动手对Python虚拟机进行改造
◆完整覆盖Python所有的核心议题,深刻揭示Python与C/C++之间如何互动
◆哲思自由软件社区倾力审校...

推荐阅读
Python短袖黑色(M号)..

市场价:¥59.00
4-5星价:¥44.25
[购买] [收藏]

内容简介回到顶部↑

作为主流的动态语言,Python不仅简单易学、移植性好,而且拥有强大丰富的库的支持。此外,Python强大的可扩展性,让开发人员既可以非常容易地利用C/C++编写Python的扩展模块,还能将Python嵌入到C/C++程序中,为自己的系统添加动态扩展和动态编程的能力。
  为了更好地利用Python语言,无论是使用Python语言本身,还是将Python与C/C++交互使用,深刻理解Python的运行原理都是非常重要的。本书以CPython为研究对象,在C代码一级,深入细致地剖析了Python的实现。书中不仅包括了对大量Python内置对象的剖析,更将大量的篇幅用于对Python虚拟机及Python高级特性的剖析。通过此书,读者能够透彻地理解Python中的一般表达式、控制结构、异常机制、类机制、多线程机制、模块的动态加载机制、内存管理机制等核心技术的运行原理,同时,本书所揭示的动态语言的核心技术对于理解其他动态语言,如Javascript、Ruby等也有较大的参考价值。
  本书适合于Python程序员、动态语言爱好者、C程序员阅读。

作译者回到顶部↑

本书提供作译者介绍

陈儒,计算机科学与工程专业硕士,问天(北京)信息技术有限公司技术负责人,致力于信息检索方向的研究与开发。
.. << 查看详细

目录回到顶部↑

第0章 PYTHON源码剖析--编译PYTHON
 0.1 PYTHON总体架构
 0.2 PYTHON源代码的组织
 0.3 WINDOWS环境下编译PYTHON
 0.4 UNIX/LINUX环境下编译PYTHON
 0.5 修改PYTHON源代码
 0.6 通往PYTHON之路
 0.7 一些注意事项
第1部分 PYTHON内建对象
 第1章 PYTHON对象初探
  1.1 PYTHON内的对象
   1.1.1 对象机制的基石——PyObject
   1.1.2 定长对象和变长对象
  1.2 类型对象
   1.2.1 对象的创建
   1.2.2 对象的行为
   1.2.3 类型的类型
  1.3 PYTHON对象的多态性
  1.4 引用计数
  1.5 PYTHON对象的分类

前言回到顶部↑

第一次接触Python,是通过《程序员》杂志上“恶魔吹着笛子来”的系列文章——《自由与繁荣的国度》。但是真正开始使用Python,还是在进入实验室,开始研究自然语言处理和信息检索之后。自然语言处理其实大部分的时间都在与文本打交道,需要进行大量的对文本分析、统计的工作。开始的时候,我使用的是C++,因为大学的时候第一门编程语言课就是C,其后转向C++是很自然的迁移。那时候觉得C++很有一种高贵的感觉,因为C++足够复杂,有足够多的trick,尤其是像模板和泛型编程这样的新鲜玩意儿。掌握这么复杂的东西,也就意味着你的脑袋跟这东西一样复杂,这是很能让人虚荣的一件事。.
C++的复杂性是个仁者见仁,智者见智的话题,但其实回到文本处理这个话题上来说,C++的STL在很大程度上已经足够好用了。文本处理不是服务器,所以不需要考虑自己管理内存,不需要考虑这个模式那个模式,STL提供了足够多的工具,简单组装一下就可以用了。
但俗话说得好,“不怕不识货,就怕货比货”,当我开始尝试用Python来进行日常的工作之后,突然发现C++太复杂了。对于Python,我的感觉只有四个字:摧枯拉朽。我只需要简单地写一个l = [ ],再也不用写诸如list[ map[string, string] ] l = list[ map[string, string] ]()这样折磨人眼的东西了,这使得代码量急剧减少。对于采用Python这样的英明决策,我想,最满意的就是我的手指头了。
随着对Python的逐渐熟悉,我越来越惊叹于Python简洁的表达,强大的功能。尤其是Python表现出来的强烈的动态性。比如下面这段与解释器的交互过程:
]]] class A:
... pass
...
]]] a = A()
]]] a.show()
Traceback (most recent call last):
File "[stdin]", line 1, in [module]
AttributeError: A instance has no attribute 'show'
]]]
]]] class B:
... def show(self):
... print 'i am B'
...
]]] A.__bases__ = (B,)
]]] a.show()
i am B

序言回到顶部↑

推荐序一
让我们做得更好.
Python,我想已经不再是个陌生的词了,越来越多的人开始学习它,使用它,宣传它,甚至用它找到了工作。如果你了解Python,那么我想问一下,你对它有多了解呢?它是一种什么语言?如何实现的?有哪些对象,它们是如何处理的?你了解Python的虚拟机吗?了解它的运行环境吗?其实作为初学者或只是使用者,你的确不必了解这么多细节的内容,但是探究事物的原理,分析底层细节却也是许多人成为高手、“老鸟”的原因,因为你知道别人不知道的东西,掌握了别人不了解的技术,这些内容使得你的见解、分析,甚至作品都可能超过别人。那么本书就向你提供了一个了解Python底层细节的机会,你可以沿着作者的思路和角度去体会Python的工作原理和底层的细节,一点一点地了解Python源码的精妙之处,有助于更好地掌握Python并编写出高质量的程序。
本书的内容深入到Python的方方面面,像Python的对象实现机制是如何用C来表现的;对象的特性是如何实现的;对象是如何管理的;不同对象,如int、str、dict、list等的处理;Python的虚拟机框架、作用域的实现;运行时环境,pyc文件,类机制等。还有一些高级话题,如内存管理,GIL(Global Interpreter Lock)与多线程,模块动态加载等。
在接触到本书之前,我已经在作者的Blog上见到过部分内容,那时已经被作者不懈的毅力和深厚的功力折服。说实话,由于经常接触Python,对于原本熟悉的C语言也越来越陌生,更不要说去“啃”Python的C代码了。而Robert Chen可以从源码中进行有条理的分析和整理,并终于出版此书。这不仅让人敬佩,更让广大的Python爱好者受益多多。因此,当出版社希望我为本书作一个推荐序时,我毫不犹豫地答应下来。
第一次见到Robert Chen还是在CPUG的一次会课上,那时Robert Chen给大家带来一个主题为“Python作用域与名字空间”的讲座,让在座的Pythoner对Python的作用域机制有了更深入的理解,讲座效果非常好,讨论也很热烈。他从源码的角度讲述了Python的一些规则,使得大家的理解不再停留在形式上或规则上,而达到了本质或实现的层次,让我们“知其然,更知其所以然”。
如果你是一位热心的Pythoner,想必会知道中文Python的邮件列表(http://groups. google.com/group/python-cn),从上面对有些问题的回复中,你会发现Robert Chen总是从源码及字节码实现的角度来回答问题,非常有说服力。因此当许多Python爱好者得知Robert Chen将出版此书时,都非常盼望,现在这本书终于出版,大家都深感庆幸!
本书不仅仅是高水平、高质量的一本书,纵观国内外与Python相关的书籍,它也是第一本从源码角度写作的书,所以意义非常。目前国内原创的Python书籍还不多,就我所知国内已经出版的几本Python方面的书尚不能满足读者需求,而本书应该不会让你失望。
不过本书应该不是面向初学者的书,因为它涉及了许多较深的内容和知识,建议读者应先掌握像C语言、数据结构、操作系统、编译原理等方面的基础知识,并且具备一定的编程经验,才能更好地理解书的内容。
再次感谢Robert Chen带给大家的这份礼物!
李迎辉
limodou@gmail.com
2008年春

推荐序二
真的难以想象,Python语言和社区能够发展得如此迅速。在我第一次使用Python完成我的项目时,它还不过是一个刚刚在开源社区中起步的新生儿,然后在各方面迅速推广,4月8日,google发布的App Engine更是让所有的开发人员眼中一亮。相信今后会有更多的开发人员投入到Python的技术领域中来。
记得在2002年时,我使用Python写了一套大规模的消息系统,几位同事分别使用Python、Java和C完成了一个异步二进制消息流的客户端和服务器。通过一系列测试,大家惊奇地发现Python以每秒一倍的数据处理量超过了C写的代码。后来,我的同事细心地查看了Python的源代码,发现了几种完全不同的操作系统调用方法,以及为提高性能而使用的技巧。这也是我第一次开始查看Python的源代码。最近的一次则是我在xBayTable中使用asyncore时,通过阅读asyncore的源代码排除了一个痛苦bug,轻松地找到了问题的根源,很快就换了一种解决方案来继续我的工作。了解Python的源代码,我们能获得很多的好处:
使用Python方法提高自己的代码性能和功能;..
快速地与文档结合,解决问题或是找出方法;
扩展Python。

书摘回到顶部↑

第1章 Python对象初探
  对象是Python中最核心的一个概念,在Python的世界中,一切都是对象,一个整数是一个对象,一个字符串也是一个对象。更为奇妙的是,类型也是一种对象,整数类型是一个对象,字符串类型也是一个对象。换句话说,面向对象理论中的“类”和“对象”这两个概念在Python中都是通过Python内的对象来实现的。
  在Python中,已经预先定义了一些类型对象,比如int类型、string类型、dict类型等,这些我们称之为内建类型对象。这些类型对象实现了面向对象中“类”的概念;这些内建类型对象通过“实例化”,可以创建内建类型对象的实例对象,比如int对象、string对象、dict对象。类似的,这些实例对象可以视为面向对象理论中“对象”这个概念在Python中的体现。
  同时,Python还允许程序员通过class A(object)这样的表达式自己定义类型对象。基于这些类型对象,同样可以进行“实例化”的操作,创建的对象称为“实例对象”。Python中不光有着这些千差万别的对象,这些对象之间还存在着各种复杂的关系,从而构成了我们称之为“类型系统”或“对象体系”的东西。
  Python中的对象体系是一个庞大而复杂的体系,如果说在本书的第一章我就试图将这个体系阐释清楚,这只能说明我是个疯子。在本章中,我们的重点将放在了解对象在Python内部是如何表示的,更确切地说,因为Python是由C实现的,所以我们首先要弄清楚的一个问题就是:对象,这个神奇的东西,在C的层面,究竟长得是个什么模样,究竟是三头六臂,还是烈焰红唇。
  除此之外,我们还将了解到类型对象在C的层面是如何实现的,并初步认识类型对象的作用及它与实例对象的关系。总之,本章对Python对象体系的介绍力求简洁,但是并不肤浅,有的地方甚至会相当深入。因此,在本章的阅读中,如果有什么疑难的地方,没有关系,先放下,只要有一个直观的感觉就可以了,这并不妨碍你阅读接下来的内容。
  本章的目的是为能够顺利而快速地进入对内建对象的剖析打下必要的基础,至于对Python对象体系的详细剖析,会在第2部分的最后一章中介绍到。只有到了那个时候,我们才有足够的能力将这个体系看个明白。
  1.1 Python内的对象
  从1989年Guido在圣诞节揭开Python的大幕开始,一直到现在,Python经历了一次一次的升级,但是其实现语言一直都是ANSI C。我们知道,C并不是一个面向对象的语言,那么在Python中,它的对象机制是如何实现的呢?
  对于人的思维来说,对象是一个比较形象的概念,而对于计算机来说,对象却是一个抽象的概念。它并不能理解这是一个整数,那是一个字符串,对于计算机来说,它所知道的一切都是字节。通常的说法是,对象是数据以及基于这些数据的操作的集合。在计算机中,一个对象实际上就是一片被分配的内存空间,这些内存可能是连续的,也可能是离散的,这都不重要,重要的是这片内存在更高的层次上可以作为一个整体来考虑,这个整体就是一个对象。在这片内存中,存储着一系列的数据以及可以对这些数据进行修改或读取操作的一系列代码。
  在Python中,对象就是为C中的结构体在堆上申请的一块内存,一般来说,对象是不能被静态初始化的,并且也不能在栈空间上生存。唯一的例外就是类型对象,Python中所有的内建的类型对象(如整数类型对象,字符串类型对象)都是被静态初始化的。
  在Python中,一个对象一旦被创建,它在内存中的大小就是不变的了。这就意味着那些需要容纳可变长度数据的对象只能在对象内维护一个指向一块可变大小的内存区域的指针。为什么要设定这样一条特殊的规则呢,因为遵循这样的规则可以使通过指针维护对象的工作变得非常的简单。一旦允许对象的大小可在运行期改变,我们就可以考虑如下的情形。在内存中有对象A,并且其后紧跟着对象B。如果运行期某个时刻,A的大小增大了,这意味着必须将A整个移动到内存中的其他位置,否则A增大的部分将覆盖原本属于B的数据。只要将A移动到内存中的其他位置,那么所有指向A的指针就必须立即得到更新,光是想一想,就知道这样的工作是多么的繁琐。
  ……
评论交流

共有62人开贴评论  117人参与评论  39人参与打分 查看

24人
 61%
用户平均打分
我要写评论 help如何参与评论和打分
4人
 10%
5人
 12%
1人
 2%
5人
 12%

netyi79
一级评论员
评价等级:  
发表于:2008-10-19 10:28:00
看得出是首次写书,文本的行文结构,内容组织,节奏把握略有不足。至于文笔风格,这个是见仁见智的了。说到内容的含金量,一个词,超值。
回复 ( 1条评论-- 点击查看讨论 )
您觉得呢? 送鲜花 (得1支)  扔鸡蛋 (得0个)

bigsword

一级评论员
精彩书评
评价等级:  
发表于:2008-6-26 21:32:00
很久以前在作者的Blog上面看过他阅读Python源代码的笔记,不敢说有收获,但是为作者的精神所触动,也认为作者的文笔和条理很好。

很高兴有中文原创的书出版,这无论如何是一件值得高兴的事情。愿更多的人能够体会到python的简洁之美
回复 ( 1条评论-- 点击查看讨论 )
您觉得呢? 送鲜花 (得0支)  扔鸡蛋 (得1个)

fullsail

三级评论员
精彩书评
评价等级:  
发表于:2008-7-21 10:19:00
我在书店已经买到了,国内称得上“著”的书不多,这本书不但是著,而是著得不错。看完第一个部分就已经收益不浅啦:

1、了解int、string,list,dict的内部机理,这样你可以避免一些很低效的使用模式。诸如多个字符串连接时如何做效率最好之类的话题,列表如何使用更高效,
dict用什么类型做key最高效?
2、了解Python背后的设计机制,这有什么好处?你可以调整编译时的参数,给自己定制一个Python解释器,看完第一部分,至少可以做调整缓冲的活计。
3、每个chapter最后的hack XXX,不错,有分析有实践。
4、可以知道limodou的真名,哈哈哈!

第一部分,讲一般的类型实现,难度不大,基本按看侦探小说(不是言情小说哦,多少也得过点脑子)的速度就行了;第二部分的虚拟机部分会更有意思一些。

不过我觉得也有些小缺点,遗憾:

1、YY的地方在可以接受的范围之内,但仍然觉得有点多~
2、略显哆嗦,所以我略过了文本若干。
3、陈述代码的方式,按照“Linux内核情景分析”的那样就好了。可能是我不习惯这种代码陈述方式的原因,感觉不少代码有头无尾。虽然我知道代码的逻辑可能已经结束,但看不到最后的}总有“请看下集”的感觉。
4、不是作者的问题,印刷错误有一些,但远在可以接受的范围之内。

从目前为止阅读体验上看,已经很不错了。
回复 ( 10条评论-- 点击查看讨论 )
您觉得呢? 送鲜花 (得3支)  扔鸡蛋 (得7个)

fullsail

三级评论员
精彩书评
评价等级:  
发表于:2008-7-28 13:14:00
讲Python虚拟机章节的质量也是令人满意的,我一直对异常实现比较好奇,原来是这样实现的呀!几种函数参数的介绍也不错,比如,为什么默认参数一定要定义在参数列表的尾部呢?后面部分的阅读难度要高一些,需要反复向前查找一些细节,这时就明显地感到没有索引的不爽了。至少是我,经常需要向前翻页查找相关字节码的细节,后面那几页广告换成索引就更好啦!唉,只能在扉页上自己做字节码的索引了。没有索引,这是国内图书的通病,甚至原著有的,译时也多半要“落下”,最令我深恶痛绝的就是Solaris internals。建议此书,整个电子版的索引,供俺们下载打印,夹到书中。
回复 ( 1条评论-- 点击查看讨论 )
您觉得呢? 送鲜花 (得2支)  扔鸡蛋 (得1个)

willmore2001

五级评论员
该会员在china-pub购买过此书
评价等级:  
发表于:2010-1-24 22:19:00
值得仔细推敲的书.
您觉得呢? 送鲜花 (得0支)  扔鸡蛋 (得0个)
我要写评论
查看所有评论交流(共62条)