Python源码解读之零 Python源码整体架构
今天打算开一个新的系列,本系列将和大家一起对Python的源码进行分析,有参考陈儒的《Python 源码剖析》(强烈推荐这本书),做到知其然知其所以然。
总体架构
首先我们先从总体结构看一下Python源码的整体架构:
大致分为三个模块
- 代码文件
File Groups
- python所提供的的大量的模块、库、以及用户自定义的模块。用户还可以通过自定义模块来扩展python系统。 - 解释器
Python Core
- 又称Python虚拟机,对代码分析理解,翻译成字节流,并运行这些字节代码。Scanner
负责词法分析的工作,将代码一行一行切分为 tokenParser
则负责语法分析,将 Token 组织为抽象语法树Compiler
则将语法树转化为指令集合的字节码流,最后由Code Evaluator
来执行这些字节码。
- 运行环境
Runtime Env
- 包括运行时的对象、基础类型结构、内存分配器和实时的运行状态信息。Object
和Type Structure
分别是程序在运行过程中生成的对象和Python中的自带内建对象,如int、List、dict等。Memory Allocator
则负责申请创建对象需要的内存,本质就是封装了 C 语言里面的malloc()
函数。Current State
负责维护运行时的各类状态信息,以便在程序执行过程中如果发生状态变化(正常态和异常态)时,仍然能正常运行。
然后可以看一下Python源码的目录结构:
这里有几个目录值得关注一下:
Include:包含了 Python 提供的所有头文件,如果用户需要自己用 C 或 C++来编写自定义模块扩展 Python,那么就需要用到这里提供的头文件。
Lib:包含了 Python 自带的所有标准库,且都是用 Python 语言编写的。
Modules:包含了所有用 C 语言编写的模块,比如 math、hashlib 等。它们都是那些对速度要求非常严格的模块。而相比而言,Lib 目录下则是存放一些对速度 没有太严格要求的模块,比如 os。
Parser:包含了 Python 解释器中的 Scanner 和 Parser 部分,即对 Python 源代码进行词法分析和语法分析的部分。除此以外,此目录还包含了一些有用的工 具,这些工具能够根据 Python 语言的语法自动生成 Python 语言的词法和语法分析器,与 YACC 非常类似。
Objects:包含了所有 Python 的内建对象,包括整数、list、dict 等。同时,该目录还包括了 Python 在运行时需要的所有的内部使用对象的实现。
Python:包含了 Python 解释器中的 Compiler 和执行引擎部分,是 Python 运行的核心所在。
PCbuild:包含了 Visual Studio 2003 的工程文件,研究 Python 源代码就从这里开始。
Programs:包含了 Python 二进制可执行文件的源码。
Python源码解读之零 Python源码整体架构相关推荐
- DM 源码阅读系列文章(二)整体架构介绍
2019独角兽企业重金招聘Python工程师标准>>> 作者:张学程 本文为 DM 源码阅读系列文章的第二篇,第一篇文章 简单介绍了 DM 源码阅读的目的和规划,以及 DM 的源码结 ...
- 深度解读MRS IoTDB时序数据库的整体架构设计与实现
[本期推荐]华为云社区6月刊来了,新鲜出炉的Top10技术干货.重磅技术专题分享:还有毕业季闯关大挑战,华为云专家带你做好职业规划. 摘要:本文将会系统地为大家介绍MRS IoTDB的来龙去脉和功能特 ...
- MyBatis 源码解读(零)导语
简单介绍下我使用最多的持久层框架 Hibernate valuelist MyBatis 这三个框架,也是用过国内的一些产品,不过已经很少了. 虽然已经使用了很长时间,但是还没有认真的读过该项目的源码 ...
- 涨薪秘籍之源码篇:Spring全家桶源码解读,大师晋级笔记
最近很多人留言说今年找工作太难了,要涨薪几乎更难了 !真的就这么悲观吗?其实不然,我们企业一直都在大量的招人,一直都没停过.只是一点和之前不一样要求变高了,优秀的人一直都缺. 我身边朋友所在的大厂也一 ...
- linux下free源码,linux命令free源码解读:Procps free.c
linux命令free源码解读 linux命令free源码解读:Procps free.c 作者:isayme 发布时间:September 26, 2011 分类:Linux 我们讨论的是linux ...
- Java Review - PriorityQueue源码解读
文章目录 Pre PriorityQueue 概述 PriorityQueue 继承关系 PriorityQueue通过用数组表示的小顶堆实现 时间复杂度 构造函数 方法 add()和offer() ...
- Java Review - Queue和Stack 源码解读
文章目录 Pre 概述 Queue Deque ArrayDeque 一览 构造函数 属性 方法 addFirst() addLast() pollFirst() pollLast() peekFir ...
- PostgreSQL 源码解读(35)- 查询语句#20(查询优化-简化Having和Grou...
本节简单介绍了PG查询优化中对Having和Group By子句的简化处理. 一.基本概念 简化Having语句 把Having中的约束条件,如满足可以提升到Where条件中的,则移动到Where子句 ...
- Elasticsearch 7.X Ik源码解读,及自定义远程动态词库
一.ik 远程词库 上篇文章对ik进行了整体的讲解,包括远程动态词库的讲解,但是上篇文章中是基于nginx+静态txt文件实现的,利用nginx 对文件修改后自动添加Last-Modified 的属性 ...
最新文章
- AI人才「用工荒」如何解决?看看这几家顶级公司的应对策略
- php curl viewstate,php curl – 发布asp.net viewstate值
- 语言 重量计算_R语言 第五章 高级绘图工具(4)
- c++11中thread join和detach的区别
- RabbitMQ单机瞎玩(1)
- ASP.NET Core和Angular 2双剑合璧
- 不会JS中的OOP,你也太菜了吧!(第二篇)
- CentOS 7安装Teamviewer 12
- 6.数据结构 --- 树和二叉树
- 同步现象 心理学_「心理学学了些什么?」基础心理学知识1
- MyVoix2.0.js 源码分析 WebSpeech与WebAudio篇
- OV7725学习(二)
- WPS Office Pro v10.8.2.6726 绿色便携专业增强版
- julia安装源_[julia]本地离线安装package
- 如何让微信公众号的排名靠前些,文章的排名规则
- Win 7 安装office visio
- 超人说我最叼蝙蝠侠笑了 超级英雄战力排名
- Registered driver with driverClassName=oracle.jdbc.driver.OracleDriver was n
- 网络游戏(MMORPG) 好玩的原因
- 计算机软件在生物学应用,计算机辅助教学软件在生物教学中的应用
热门文章
- 神秘的程序员表情包 (第一发)
- 论文精读:Asynchronous, Photometric Feature Tracking using Events and Frames(IJCV 2019)
- 韩语计算机术语大全,韩语词汇辅导:韩语计算机、互联网术语1
- Python求数组众数
- Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift 论文笔记
- 微信小程序开发之小程序交互(实现登录功能)
- Android的webview有什么用,Android中webview使用的一些坑
- 在 CentOS 8 上使用 LXC / LXD 运行 Linux 容器
- python爬虫实战一|大众点评网
- python爬虫教程简书_7个Python爬虫实战项目教程