Python的整体架构主要分为3个部分:

Python总体架构介绍_Python架构

我们分别来说一说。

第一部分File Groups。

左边是Python提供的核心模块(Core Modules)、库(Library)和用户自定义模块(User-defined Modules)。

Core Modules——核心模块:

        是指那些与Python解释器紧密集成的模块,它们提供了Python语言的基础功能。这些模块是Python标准库的一部分,通常不需要额外安装,并且可以在任何Python程序中直接导入使用。以

        我们来看一看主要有哪些核心模块: 

        sys:提供了访问Python解释器和它的环境的方法,包括与解释器强烈交互的函数和变量。

        os:提供了与操作系统交互的功能,如文件和目录管理、执行系统命令、处理文件路径等。

        io:支持对二进制数据和文本数据的输入/输出操作,提供了文件读写、内存文件读写等功能。

        time:提供了各种与时间相关的函数,如获取当前时间、测量时间间隔、延迟执行等。

        math:包含了一些基本的数学运算函数,如三角函数、指数和对数函数、幂函数等。

        datetime:提供了日期和时间的操作,包括日期、时间、时区、差值和周期等。

        json:用于解析JSON格式的数据,支持将Python对象编码成JSON字符串,以及将JSON字符串解码成Python对象。

        csv:用于读写CSV文件,提供了处理逗号分隔值数据的工具。

        re:提供了正则表达式的支持,用于字符串的搜索、替换、匹配和分割等操作。

        collections:提供了一些额外的容器类型,如dictlistsettuple之外的CounterOrderedDictdefaultdict等。

        heapq:提供了一个基于堆队列算法的最小值堆的实现,用于管理优先队列。

        itertools:提供了创建迭代器的工具,用于生成复杂的迭代器组合。

        operator:提供了访问Python操作符的函数,如算术运算符、比较运算符、逻辑运算符等。

        functools:提供了一些高阶函数和函数操作,如reducepartiallru_cache等。

        threading:提供了线程相关的操作,允许程序中并发执行多个线程。

        multiprocessing:提供了跨平台的进程基并发性,允许程序创建多个进程。

        这些核心模块是Python编程的基础,它们为Python程序员提供了强大的工具集,以支持各种编程任务和应用场景。由于它们是Python标准库的一部分,因此不需要额外安装,可以直接在任何Python程序中导入使用。


Library——库:

        库通常指的是一组预先构建的代码,这些代码被组织成可以重复使用的模块,以执行常见的任务。库可以是Python标准库的一部分,也可以是第三方库。

        以下是一些Python中常见的库,它们不属于核心模块,但也非常常用:

    NumPy:用于数值计算的库,提供了强大的多维数组对象和大量的数学函数。

    Pandas:提供了数据结构和数据分析工具,非常适合处理表格数据。

    SciPy:基于NumPy,提供了科学计算中常用的工具和算法,如线性代数、数值积分、优化和信号处理。

    Matplotlib:用于创建静态、交互式和动画可视化的库。

    Seaborn:基于Matplotlib,提供了更高级的可视化功能,用于绘制统计图形。

    TensorFlow:由Google开发的开源机器学习库,用于数据流图的数值计算。

    Keras:一个高层神经网络API,可以运行在TensorFlow、CNTK或Theano之上。

    PyTorch:由Facebook开发的开源机器学习库,广泛用于计算机视觉和自然语言处理。

    Scikit-learn:提供了简单的高效机器学习算法,如分类、回归、聚类和降维。

    Django:一个高级的Web框架,鼓励快速开发和干净、实用的设计。

    Flask:一个轻量级的Web应用框架,适合小型项目和微服务。

    Requests:用于发送HTTP请求的库,简化了与Web服务的交互。

    Beautiful Soup:用于解析HTML和XML文档的库,常用于Web抓取。

    SQLAlchemy:一个SQL工具包和对象关系映射(ORM)库,用于与数据库进行交互。

    Celery:一个异步任务队列/作业队列,基于分布式消息传递。

    APScheduler:用于在Python应用程序中进行任务调度的库。

    Pygame:用于创建视频游戏的库,提供了图形和声音库。

    Tkinter:Python的标准GUI(图形用户界面)库。

    PyQt PySide:提供了Qt应用程序框架的Python绑定,用于创建跨平台的桌面应用程序。

    asyncio:用于编写单线程并发代码,使用异步I/O、事件循环、协程和任务。

        这些库通常需要使用包管理工具(如pip)进行安装,它们扩展了Python的功能,使得开发者可以更容易地构建复杂的应用程序。第三方库的数量和种类非常庞大,可以根据项目需求选择合适的库来使用。


User-defined Modules——用户自定义模块:

        是指Python程序员根据特定需求创建的模块。这些模块可以包含函数、类、变量以及其他Python代码,它们被组织在.py文件中,并且可以像Python标准库或第三方库中的模块一样被导入和使用。用户定义模块使得代码更加模块化、可重用和易于维护。

创建用户定义模块的步骤:

  1. 规划模块结构:确定模块将包含哪些功能,并规划好函数和类的组织结构。
  2. 编写代码:在.py文件中编写模块代码。每个文件都可以作为一个模块。
  3. 组织为包:如果模块较多,可以组织成包(package)。包是包含多个模块的目录,通常包含一个 __init__.py 文件。
  4. 导入和使用:在需要使用模块的Python脚本或程序中,使用import语句导入模块。

右边是Python的运行时环境(Runtime Environment),是指在程序执行时,提供必要的资源、服务和条件的环境。包括对象/类型系统(Object/Type Structures)、内存分配器(Memory Allocator)、运行时状态信息(Current State of Python)。

Object/Type Structures——对象/类型系统:

在Python中,对象和类型结构是核心概念,它们构成了语言的面向对象编程(OOP)基础。以下是Python中对象和类型结构的关键组成部分:

1. 对象(Objects):
   - 在Python中,对象是内存中的一个存储实体,它可以是变量、函数、类、模块等。
   - 对象可以包含数据(属性)和代码(方法)。
   - 所有对象都是某个类的实例。

2. 类(Classes):
   - 类是创建对象的蓝图或模板,它定义了一组属性和方法。
   - 类可以包含初始化方法(`__init__`),这是一个特殊的方法,用于在创建新实例时设置对象的初始状态。

3. 类型(Types):
   - 类型是对象的分类,定义了对象可以执行的操作。
   - Python中的内置类型包括`int`、`float`、`str`、`list`、`dict`等。
   - 用户可以通过定义类来创建自定义类型。

4. 实例(Instances):
   - 实例是类的具体对象,通过类创建。
   - 实例化是创建类的新对象的过程。

5. 属性(Attributes):
   - 属性是对象的状态,即对象的变量。
   - 属性可以存储在对象中,并且可以被对象的方法访问和修改。

6. 方法(Methods):
   - 方法是对象的行为,即对象可以执行的函数。
   - 方法通常接受参数,并可以访问和修改对象的属性。

7. 继承(Inheritance):
   - 继承是Python中代码复用的一种方式,允许一个类(子类)继承另一个类(父类)的属性和方法。
   - 子类可以扩展或修改父类的行为。

8. 多态(Polymorphism):
   - 多态是指对象可以有多种形式,允许不同类的对象对同一消息做出不同的响应。
   - 在Python中,多态通常是通过方法重载和覆盖实现的。

9. 封装(Encapsulation):
   - 封装是将数据(属性)和操作数据的代码(方法)捆绑在一起的原则。
   - 在Python中,封装通常通过类来实现,使用私有属性(以双下划线开头)和公共方法来控制对属性的访问。

10. 元类(Metaclasses):
    - 元类是类的类,它定义了其他类的行为。
    - 元类在Python中是一个高级特性,通常用于框架和库的开发。

11. 特殊方法(Magic Methods):
    - 特殊方法是Python中以双下划线(如`__init__`、`__str__`、`__len__`等)包围的方法。
    - 这些方法允许开发者定义或修改类的默认行为。

12. 模块(Modules):
    - 模块是包含Python定义和声明的文件。
    - 模块可以定义函数、类和变量,也可以包含可执行的代码。

13. 包(Packages):
    - 包是模块的集合,它们组织了多个模块和子包。
    - 包通常用于大型项目,以组织相关的模块。

这些概念共同构成了Python中的对象和类型结构,它们是理解和使用Python进行面向对象编程的基础。通过这些结构,Python能够提供强大的数据抽象和代码复用机制。

Memory Allocator——内存分配器:

在Python中,`MemoryAllocator` 并不是一个直接暴露给用户或在标准库中明确定义的组件。然而,它的概念与内存分配和管理密切相关。在编程语言的底层,内存分配器是负责管理内存分配和释放的系统组件。以下是一些与Python内存分配相关的要点:

1. 内存管理:
   - Python使用引用计数来跟踪每个对象的引用数量。当一个对象的引用计数降至零时,它将被垃圾回收。

2. 垃圾回收:
   - Python的垃圾回收机制主要依赖于引用计数,但也包括一个循环检测器来处理循环引用的问题。这个循环检测器是一个世代垃圾收集器,它可以识别并清理循环引用的对象。

3. 内存分配:
   - Python对象通常在堆上分配。Python解释器(特别是CPython)使用特殊的内存分配器来管理对象的内存分配,以提高效率和减少内存碎片。

4. 对象模型:
   - Python的所有对象都是通过堆分配的,包括整数、浮点数、字符串、列表、字典等。这些对象在Python中有统一的内存布局。

5. 内存池:
   - 为了避免频繁地与操作系统交互,Python使用内存池(memory pool)来分配小块内存。这在分配和释放大量小对象时尤其有用。

6. `PyMem_Allocator`:
   - 在CPython的源代码中,`PyMem_Allocator` 是一个结构体,它定义了一套内存分配和释放的函数。这允许Python解释器使用不同的内存分配策略。

7. `malloc` 和 `free`:
   - 在C语言中,`malloc` 和 `free` 是标准库函数,用于动态内存分配和释放。CPython在内部使用这些函数(或其他类似的函数)来管理内存。

8. `gc` 模块:
   - Python的 `gc` 模块提供了垃圾回收相关的函数,允许用户与Python的垃圾回收器交互,例如触发垃圾回收、获取对象的引用计数等。

9. 内存分析和调试:
   - Python提供了一些工具和模块,如 `tracemalloc` 和 `objgraph`,用于分析内存使用情况和调试内存泄漏问题。

10. 第三方内存管理库:
    - 除了Python自带的内存管理功能,还有一些第三方库提供了额外的内存管理工具,如 `jemalloc`,它是一个高性能的内存分配器,可以作为Python的内存管理后端。

在Python中,大多数内存管理的细节对用户来说是透明的,因为Python的设计哲学是简化编程。然而,了解内存分配器的概念和Python的内存管理机制对于编写高效、内存使用的程序是非常有帮助的。

Current State of Python——运行时状态信息:

运行时状态维护了解释器在执行字节码时不同状态(比如,正常状态和异常状态)之间切换的动作,我们可以将它视为一个巨大而复杂的有穷状态机。内存分配器则全权负责Python中创建对象、内存的申请工作。实际上,它就是Python运行时与C中malloc的一层接口。而对象/类型系统则包含Python 中存在的各种内置对象,比如整数、list和dict,以及各种用户自定义的类型和对象。


中间就是 Python 的核心--解释器(interpreter),或者称为虚拟机。在解析器中,箭头的方向指示了 Python 运行过程中的数据流方向。其中 Scanner 对应词法分析,将文件输入的 Python 源代码或从命令行输入的一行行 Python 代码切分为一个的 token; Parser 对应语法分析,在Scanner 的分析结果上进行语法分析,建立抽象语法树(AST);Compiler 是根据建立的 AST 生成指令集合 -- Python 字节码(byte code),就像 Java 编译器和 C#编译器做的那样;最后由 Code Evaluator 来执行这些字节码。因此 Code Evaluator 又可以被称为虚拟机。