Python源码剖析

深度探索动态语言核心技术

8.7658 评价豆瓣读书
阅读
¥38.39¥23.03
电子工业科技生活全场6折丨10月特价 了解详情
  • 导言
  • 目录
  • 作品信息

作为主流的动态语言,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程序员阅读。

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

  1. 第0章 Python源码剖析——编译Python
  2. 0.1 Python总体架构
  3. 0.2 Python源代码的组织
  4. 0.3 Windows环境下编译Python
  5. 0.4 Unix/Linux环境下编译Python
  6. 0.5 修改Python源代码
  7. 0.6 通往Python之路
  8. 0.7 一些注意事项
  9. 第1部分 Python内建对象
  10. 第1章 Python对象初探
  11. 1.1 Python内的对象
  12. 1.1.1 对象机制的基石——PyObject
  13. 1.1.2 定长对象和变长对象
  14. 1.2 类型对象
  15. 1.2.1 对象的创建
  16. 1.2.2 对象的行为
  17. 1.2.3 类型的类型
  18. 1.3 Python对象的多态性
  19. 1.4 引用计数
  20. 1.5 Python对象的分类
  21. 第2章 Python中的整数对象
  22. 2.1 初识PyIntObject对象
  23. 2.2 PyIntObject对象的创建和维护
  24. 2.2.1 对象创建的3种途径
  25. 2.2.2 小整数对象
  26. 2.2.3 大整数对象
  27. 2.2.4 添加和删除
  28. 2.2.4.1 使用小整数对象池
  29. 2.2.4.2 创建通用整数对象池
  30. 2.2.4.3 使用通用整数对象池
  31. 2.2.5 小整数对象池的初始化
  32. 2.3 Hack PyIntObject
  33. 第3章 Python中的字符串对象
  34. 3.1 PyStringObject与PyString_Type
  35. 3.2 创建PyStringObject对象
  36. 3.3 字符串对象的intern机制
  37. 3.4 字符缓冲池
  38. 3.5 PyStringObject效率相关问题
  39. 3.6 Hack PyStringObject
  40. 第4章 Python中的List对象
  41. 4.1 PyListObject对象
  42. 4.2 PyListObject对象的创建与维护
  43. 4.2.1 创建对象
  44. 4.2.2 设置元素
  45. 4.2.3 插入元素
  46. 4.2.4 删除元素
  47. 4.3 PyListObject对象缓冲池
  48. 4.4 Hack PyListObject
  49. 第5章 Python中的Dict对象
  50. 5.1 散列表概述
  51. 5.2 PyDictObject
  52. 5.2.1 关联容器的entry
  53. 5.2.2 关联容器的实现
  54. 5.3 PyDictObject的创建和维护
  55. 5.3.1 PyDictObject对象创建
  56. 5.3.2 PyDictObject中的元素搜索
  57. 5.3.3 插入与删除
  58. 5.3.4 操作示例
  59. 5.4 PyDictObject对象缓冲池
  60. 5.5 Hack PyDictObject
  61. 第6章 最简单的Python模拟——Small Python
  62. 6.1 Small Python
  63. 6.2 对象机制
  64. 6.3 解释过程
  65. 6.4 交互式环境
  66. 第2部分 Python虚拟机
  67. 第7章 Python的编译结果——Code对象与pyc文件
  68. 7.1 Python程序的执行过程
  69. 7.2 Python编译器的编译结果——PyCodeObject对象
  70. 7.2.1 PyCodeObject对象与pyc文件
  71. 7.2.2 Python源码中的PyCodeObject
  72. 7.2.3 pyc文件
  73. 7.2.4 在Python中访问PyCodeObject对象
  74. 7.3 Pyc文件的生成
  75. 7.3.1 创建pyc文件的具体过程
  76. 7.3.2 向pyc文件写入字符串
  77. 7.3.3 一个PyCodeObject,多个PyCodeObject
  78. 7.4 Python的字节码
  79. 7.5 解析pyc文件
  80. 第8章 Python虚拟机框架
  81. 8.1 Python虚拟机中的执行环境
  82. 8.1.1 Python源码中的PyFrameObject
  83. 8.1.2 PyFrameObject中的动态内存空间
  84. 8.1.3 在Python中访问PyFrameObject对象
  85. 8.2 名字、作用域和名字空间
  86. 8.2.1 Python程序的基础结构——module
  87. 8.2.2 约束与名字空间
  88. 8.2.3 作用域与名字空间
  89. 8.2.3.1 LGB规则
  90. 8.2.3.2 LEGB规则
  91. 8.2.3.3 global表达式
  92. 8.2.3.4 属性引用与名字引用
  93. 8.3 Python虚拟机的运行框架
  94. 8.4 Python运行时环境初探
  95. 第9章 Python虚拟机中的一般表达式
  96. 9.1 简单内建对象的创建
  97. 9.2 复杂内建对象的创建
  98. 9.3 其他一般表达式
  99. 9.3.1 符号搜索
  100. 9.3.2 数值运算
  101. 9.3.3 信息输出
  102. 第10章 Python虚拟机中的控制流
  103. 10.1 Python虚拟机中的if控制流
  104. 10.1.1 研究对象——if_control.py
  105. 10.1.2 比较操作
  106. 10.1.2.1 COMPARE_OP指令
  107. 10.1.2.2 比较操作的结果——Python中的bool对象
  108. 10.1.3 指令跳跃
  109. 10.2 Python虚拟机中的for循环控制流
  110. 10.2.1 研究对象——for_control.py
  111. 10.2.2 循环控制结构的初始化
  112. 10.2.2.1 PyTryBlock
  113. 10.2.2.2 list的迭代器
  114. 10.2.3 迭代控制
  115. 10.2.4 终止迭代
  116. 10.3 Python虚拟机中的while循环控制结构
  117. 10.3.1 研究对象——while_control.py
  118. 10.3.2 循环终止
  119. 10.3.3 循环的正常运转
  120. 10.3.4 循环流程改变指令之continue
  121. 10.3.5 循环流程改变指令之break
  122. 10.4 Python虚拟机中的异常控制流
  123. 10.4.1 Python中的异常机制
  124. 10.4.1.1 Python虚拟机自身抛出异常
  125. 10.4.1.2 在线程状态对象中记录异常信息
  126. 10.4.1.3 展开栈帧
  127. 10.4.2 Python中的异常控制语义结构
  128. 10.4.2.1 研究对象——exception_control.py
  129. 第11章 Python虚拟机中的函数机制
  130. 11.1 PyFunctionObject对象
  131. 11.2 无参函数调用
  132. 11.2.1 函数对象的创建
  133. 11.2.2 函数调用
  134. 11.3 函数执行时的名字空间
  135. 11.4 函数参数的实现
  136. 11.4.1 参数类别
  137. 11.4.2 位置参数的传递
  138. 11.4.3 位置参数的访问
  139. 11.4.4 位置参数的默认值
  140. 11.4.4.1 函数f的第一次调用
  141. 11.4.4.2 函数f的第二次调用
  142. 11.4.5 扩展位置参数和扩展键参数
  143. 11.5 函数中局部变量的访问
  144. 11.6 嵌套函数、闭包与decorator
  145. 11.6.1 实现闭包的基石
  146. 11.6.2 闭包的实现
  147. 11.6.2.1 创建closure
  148. 11.6.2.2 使用closure
  149. 11.6.3 Decorator
  150. 第12章 Python虚拟机中的类机制
  151. 12.1 Python中的对象模型
  152. 12.1.1 对象间的关系
  153. 12.1.2 <type ‘type’> 和 <type ‘object’>
  154. 12.2 从type对象到class对象
  155. 12.2.1 处理基类和type信息
  156. 12.2.2 处理基类列表
  157. 12.2.3 填充tp_dict
  158. 12.2.3.1 slot与操作排序
  159. 12.2.3.2 从slot到descriptor
  160. 12.2.3.3 建立联系
  161. 12.2.3.4 确定MRO
  162. 12.2.3.5 继承基类操作
  163. 12.2.3.6 填充基类中的子类列表
  164. 12.3 用户自定义class
  165. 12.3.1 创建class对象
  166. 12.3.1.1 class的动态元信息
  167. 12.3.1.2 metaclass
  168. 12.3.1.2.1 获得metaclass
  169. 12.3.1.2.2 调用metaclass
  170. 12.4 从class对象到instance对象
  171. 12.5 访问instance对象中的属性
  172. 12.5.1 instance对象中的__dict__
  173. 12.5.2 再论descriptor
  174. 12.5.3 函数变身
  175. 12.5.4 无参函数的调用
  176. 12.5.5 带参函数的调用
  177. 12.5.6 Bound Method和Unbound Method
  178. 12.6 千变万化的descriptor
  179. 第13章 Python运行环境初始化
  180. 13.1 线程环境初始化
  181. 13.1.1 线程模型回顾
  182. 13.1.2 初始化线程环境
  183. 13.2 系统module初始化
  184. 13.2.1 创建__builtin__ module
  185. 13.2.1.1 创建module对象
  186. 13.2.1.2 设置module对象
  187. 13.2.2 创建sys module
  188. 13.2.2.1 sys module的备份
  189. 13.2.2.2 设置module搜索路径
  190. 13.2.3 创建 __main__ module
  191. 13.2.4 设置site-specific的module的搜索路径
  192. 13.3 激活Python虚拟机
  193. 13.3.1 交互式运行方式
  194. 13.3.2 脚本文件运行方式
  195. 13.3.3 启动虚拟机
  196. 13.3.4 名字空间
  197. 第14章 Python模块的动态加载机制
  198. 14.1 import前奏曲
  199. 14.2 Python中import机制的黑盒探测
  200. 14.2.1 标准import
  201. 14.2.1.1 Python内建Module
  202. 14.2.1.2 用户自定义Module
  203. 14.2.2 嵌套import
  204. 14.2.3 import package
  205. 14.2.4 from与import
  206. 14.2.5 符号重命名
  207. 14.2.6 符号的销毁与重载
  208. 14.3 import机制的实现
  209. 14.3.1 解析module/package树状结构
  210. 14.3.2 加载module/pakcage
  211. 14.3.2.1 搜索module
  212. 14.3.2.2 加载module
  213. 14.3.3 from与import
  214. 14.4 Python中的import操作
  215. 14.4.1 import module
  216. 14.4.2 import package
  217. 14.4.3 from & import
  218. 14.4.4 import & as
  219. 14.4.5 reload
  220. 14.4.6 内建module:imp
  221. 14.5 与module有关的名字空间问题
  222. 第15章 Python多线程机制
  223. 15.1 GIL与线程调度
  224. 15.2 初见Python Thread
  225. 15.3 Python线程的创建
  226. 15.3.1 建立多线程环境
  227. 15.3.2 创建线程
  228. 15.3.2.1 子线程的诞生
  229. 15.3.2.2 线程状态保护机制
  230. 15.3.2.3 从GIL到字节码解释器
  231. 15.4 Python线程的调度
  232. 15.4.1 标准调度
  233. 15.4.2 阻塞调度
  234. 15.5 Python子线程的销毁
  235. 15.6 Python线程的用户级互斥与同步
  236. 15.6.1 用户级互斥与同步
  237. 15.6.2 Lock对象
  238. 15.7 高级线程库——threading
  239. 15.7.1 Threading Module概述
  240. 15.7.2 Threading的线程同步工具
  241. 15.7.3 Threading中的Thread
  242. 第16章 Python的内存管理机制
  243. 16.1 内存管理架构
  244. 16.2 小块空间的内存池
  245. 16.2.1 Block
  246. 16.2.2 Pool
  247. 16.2.3 arena
  248. 16.2.3.1 “未使用”的arena和“可用”的arena
  249. 16.2.3.2 申请arena
  250. 16.2.4 内存池
  251. 16.2.4.1 可用pool缓冲池——usedpools
  252. 16.2.4.2 Pool的初始化
  253. 16.2.4.3 block的释放
  254. 16.2.4.4 内存池全景
  255. 16.3 循环引用的垃圾收集
  256. 16.3.1 引用计数与垃圾收集
  257. 16.3.2 三色标记模型
  258. 16.4 Python中的垃圾收集
  259. 16.4.1 可收集对象链表
  260. 16.4.2 分代的垃圾收集
  261. 16.4.3 Python中的标记——清除方法
  262. 16.4.3.1 寻找Root Object集合
  263. 16.4.3.2 垃圾标记
  264. 16.4.3.3 垃圾回收
  265. 16.4.4 垃圾收集全景
  266. 16.4.5 Python中的gc模块
  267. 16.4.6 总结

作者陈儒

类别 图书 / 非虚构

出版社电子工业出版社

出版日期

ISBN9787121068744

提供方电子工业出版社

标签计算机(1542)编程(462)限时特价(19281)Python(25)编译原理(3)脚本引擎(1)程序语言(10)

喜欢这本书的人也喜欢

评论24

来自豆瓣读书的评论19