---
description: 简介
---

# 1. Introduction

Python 编程语言被广泛应用已经有很长一段时间了。Python 的开发最早始于1989年，Guido Van Rossum编写了第一个版本，随后它逐渐被人们所接受，被广泛应用于从 GUI 编程到经济学研究、数据分析应用开发等诸多领域。

这本书旨在深入 Python 解释器之中，提供 python 程序运行机制的概念上的概述。本书描述的对象是 `CPython` 的解释器实现，它是目前最主流或者说官方的 Python 实现。

{% hint style="info" %}
在本书中 Python 与 CPython是同义词，任何提到 Python 的地方你都应该认为指的是 CPython 这个使用 C 语言实现的 Python 版本。 此外还有一些其它版本的实现比如 [PyPy](https://pypy.org/)，它一个是使用 Python 的子集实现的。再比如 [Jython](https://www.jython.org/) ，它实现在 JVM（Java Virtual Machine）上。
{% endhint %}

根据对解释器调用方式的不同，一个 Python 程序的执行可以分为二或三个阶段，这些内容将会被涵盖在本书的不同章节中：

1. 初始化（Initialization）：这个阶段涉及到对于python进程所需要的一系列数据结构的初始化。此阶段在交互模式下不会进行。
2. 编译（Compiling）：该阶段涉及到将源代码解析成语法树，创建 AST（Abstract Syntax Tree，抽象语法树）对象，创建 symbol tables 以及生成 code objects。
3. 解释运行（Interpreting）：这个阶段涉及到在一些环境（context）下对 code object 的执行。

从源代码生成解析树（parse tree）与 AST 的过程是一个与特定语言关系不大的过程，应用在其它语言上的方法一样可以应用在 Python 上，所以本书并不会将重点放在这里。另一方面从抽象语法树创建符号表与 code object 是编译过程中更为有趣的过程，它多多少少与 Python 更加相关，也更值得关注。对编译后的 code object 进行解释以及其中所涉及到的数据结构也将被提及。主题将包括但不限于：符号表、code object 的生成过程、Python objects、frame objects、code objects、function objects、Python opcodes、interpreter loop、生成器以及由用户定义的类。

本书的目标读者是任何想对 CPython 虚拟机如何工作有更深入了解的人，并且假设读者已经熟悉 Python ,对这门语言有基础的理解。其中会包含一些对于虚拟机源码解读的部分，如果读者对 `C` 语言有基础的了解，将更够容易跟上。说来说去，其实所需的只是一份对于理解 CPython 虚拟机的渴望。

这份材料只是对于个人在调查了解 Python 解释器内部工作原理过程中所记录笔记的扩充。网上有很多相关的资料，包括 [PyCon 视频](https://www.youtube.com/watch?v=XGF3Qu4dUqk)、[课程](http://www.pgbovine.net/cpython-internals.htm)、[博客文章](https://tech.blog.aknin.name/2010/04/02/pythons-innards-introduction/) 等等。在此对这些资源的分享者表示感谢，没有他们的贡献本书是难以完成的。

在阅读完本书之后，读者将能够理解 Python 解释器执行一段程序的内部复杂过程。这涉及到很多执行程序过程中的步骤和很多对于这些步骤很重要的数据结构。我们从一个鸟瞰图开始，来看一看当我们将一个模块名从命令行传递给一个解释器的时候会发生什么。在开始之前，可以按照  [Python Developer’s Guide](https://docs.python.org/devguide/index.html) 上的指导从源码开始编译安装一个可执行的 CPython 解释器。 \


{% hint style="info" %}
本书通篇使用 Python3。
{% endhint %}
