Python编程从小白到大牛
上QQ阅读APP看书,第一时间看更新

1.4 【小白也要懂】Python源代码的体系架构

在学习Python编程之前,我们首先需要了解一下Python的整体架构。或许有人会说,Python是一个编程语言,编程语言也会有整体架构吗?当然,Python也有整体架构。在剖析Python源码的整体架构中,利用掌握的知识不断修改Python的源代码,可以来印证自己的猜想和假设,甚至可以更有效地理解作者的设计思路。

这里我们仅仅对Python 3.8版本的源码顶层目录做简单介绍。首先,把前面下载的Python-3.8.0.tar.xz解压缩,就能得到图1-4所示的目录结构。

图1-4 Python源代码文件目录结构

对于大部分的程序员来说,并不会特意研究Python源码,因为源码包含很多晦涩难懂的设计和标准,在大部分编程工作中,程序员只需要知道怎么使用源码,而不必知道这些源码的设计原理。在这里先简单概括一下Python源码的文件类别。

● Doc:官方文档,全英文,最权威的资料,英文好的朋友可以仔细研读。

● Grammar:放置Python的EBNF文件。

● Include:放置编译所需的全部头文件。

● Lib:标准库中的Python代码。

● Mac:Mac平台特定代码。

● Misc:无法归类的文件,通常是不同类型的特定开发者文档。

● Modules:标准库中需要C语言实现的部分。

● Objects:所有内置类型的源码。

● PC:Windows平台特定代码。

● PCbuild:提供的Windows新版MSVC安装程序所需的构建文件。

● Parser:解析器相关代码,AST节点的定义也在这里。

● Programs:可执行C程序的源码,包括CPython解释器的主函数。

● Python:用来构建核心CPython运行时的代码,包括编译器、eval循环和各种内置的函数。

● Tools:用来维护Python的各种工具。

介绍完源码的架构,我们来看一下Python的整体运行架构,如图1-5所示。Python的整体运行架构分为File Group、Python Core、Runtime Environment三个部分。File Group指文件架构,也就是前面介绍过的源码;Python Core就是Python的解释器及相关组件;Runtime Environment是指Python的运行时环境,与内存相关。

图1-5 Python总体架构

1.File Group

● Core Modules:核心功能,编程的时候经常用到,如import os。

● Library库:Python的库文件,几乎所有的编程语言都有类似的东西。

● User-defined Modules:用户自定义的功能,如定义一个getinfo. py,在编辑器中进行import getinfo的导入。这就是开源语言的优势,功能不够,自定义来凑。

2. Python Core

● Interpreter:解释器进行代码解析,详情请参阅1.6节的“大牛讲坛——Python解释器详解”。

● Scanner分词:进行词法分析,将输入的Python源代码或从命令行输入的一行行Py-thon代码切分为一个Token,Token类似于临时令牌。

● Parser语法解析:进行语法分析,建立抽象语法树AST。

● Compiler编译:根据建立的AST生成指令集合,就像Java编译器和C#编译器所做的那样,编译器生成计算机可以理解的字节码。

● Code Evauator:最后由Code Evealuator来执行这些字节码,我们又称它为虚拟机。

3. Runtime Environment

● Object/Type Structures:包括了各种类型的对象,如整数、列表、字典以及用户自定义的类型和对象。可以说这部分是Python的基石。

● Memory Allocator内存分配器:创建对象时,对内存的申请工作与C中的Malloc的类似接口。

● Current State of Python:维护了解释器在执行字节码时不同的状态,维护了正常状态和异常状态之间切换动作的正确。

完整地学习Python的整体架构,更容易搞清楚Python的工作原理,但是上面很多概念对于初学者来说有些晦涩难懂,这些不要求强记,可以在初步掌握Python的用法后,再回过头来复习,相信会有更深的理解。