博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Python总体架构、Python对象

Posted on 2022-09-28 22:23  ~sang  阅读(1148)  评论(0编辑  收藏  举报

Python总体架构

Python的整体架构主要分为3个部分:
1.左边是Python提供的大量模块、库以及用户自定义的模块。
2.右边是Python的运行时环境,包括对象/类型系统、内存分配器和运行时状态信息
3.中间部分是Python的核心——解释器(interpreter),或者称为虚拟机。在解释器中箭头的方向指示了Python运行过程中的数据流方向。其中,Scanner对应词法分析——将文件输入的Python源码或从命令行输入的Python源码切分为一个个token;Parser对应语法分析——在Scanner的分析结果上进行语法分析,建立抽象语法树(AST);Compiler根据建立的AST生成指令集合——Python字节码(Bytecode),就像Java编译器和C#编译器所做的那样;Code Evaluator执行这些字节码,因此又被称为虚拟机。
4.解释器与右边的对象/类型系统、内存分配器之间的箭头表示使用关系;而与运行时状态之间的箭头表示修改关系,即Python在执行的过程中会不断的修改当前解释器所处的状态,在不同的状态之间切换。

Python源码组织

1.Include目录:包含Python提供的所有头文件。
2.Lib目录:包含Python自带的所有标准库,且都是用Python语言编写的。
3.Modules目录:包含所有用C语言编写的模块,比如math、hashlib等。
4.Parser目录:包含Python解释器中的Scanner和Parser部分,即对Python源码进行词法分析和语法分析的部分。
5.Objects目录:包含所有Python的内置对象,包括整数、list、dict等。同时,该目录还包括Python在运行时需要的所有内部使用对象的实现。
6.Python目录:包含Python解释器中的编译(Compiler)和执行引擎部分,是Python运行的核心所在。
7.PCbuild目录:包含Visual Studio 2003的工程文件,对于Python源码的研究就从这里开始。
8.Programs目录:包含Python二进制可执行文件的源码。

Python对象

1.对象是Python最核心的一个概念。在Python的世界,一切都是对象。面向对象理论中的类和对象在Python中都是通过Python内的对象来实现的。
2.在Python中,对象是为C中的结构体在堆上申请的一块内存。
3.在Python中,对象一旦被创建,它在内存中的大小就是不变的。
# 对象的分类
Python的对象从概念上大致分为5类。注意:(主要是提供一种看待Python中对象的视角而已)
-Fundamental对象:类型对象。
-Numeric对象:数值对象。
-Sequence对象:容纳其它对象的序列集合对象。
-Mapping对象:类似于C++中map的关联对象。
-Internal对象:Python虚拟机在运行时内部使用的对象。
# 对象机制的基石——PyObject
Python的对象机制是基于PyObject拓展开来的。
   在Python中,对象机制的核心其实非常简单,一个是引用计数,一个是类型信息。
   PyObject中定义了每一个Python对象都必须有的内容,这些内容将出现在每一个Python对象所占用内存的最开始的字节中。
# 类型对象
PyTypeObject的定义中包含许多信息,主要分为一下几类:
1.类型名tp_name,主要用于Python内部调试。
2.创建该类型对象时分配的空间大小信息,即tp_basicsize和tp_itemsize。
3.与该类型对象相关的操作信息,如tp_print这样的函数指针。
4.一些对象属性。