学习《Python源码剖析-深度探索动态语言核心技术》教程
 
 
 
 
Python总体架构,运行流程
 

File Group:
1.Core Modules
内部模块,例如:import os
2.Library
3.User-defined Modules
用户自定义的模块,例如定义一个getinfo.py,在test.py进行导入:import getinfo
 
Python Core(可称作解释器interpreter或虚拟机):
1.Scanner
进行词法分析,将人家输入的Python源代码或从命令行输入的一行行Python代码切分为一个token(标记)
2.Parser
进行语法分析,建立抽象语法树(AST)
3.Compiler
根据建立的AST生成指令集合(Python字节码(byte code),就像Java编译器和C#编译器所做的那样)
4.Code Evauator
最后由Code Evealuator来执行这些字节码,又可以称为虚拟机
 
Runtime Environment:
1.Object/Type Structures
包括了各种类型的对象,比如:整数、list、dict以及用户自定义的类型和对象
2.Memory Allocator
创建对象时,对内存的申请工作,是与C中的malloc的一层接口
3.Current State of Python
维护了解释器在执行字节码时不同的状态(比如正常状态和异常状态)之间的切换的动作。
 
Python源码主要目录结构
Include:该目录下包含了Python提供的所有头文件,如用户需要自己用C或C++来编写自定义模块扩展Python,那么就需要用到这个理提供的头文件。
Lib:该目录包含了Pyton自带的所有标准库,Lib中的库都是用Python语言编写的。
Modules:该目录中包含了所有用C语言编写的模块,比如random、cStringIO等。Modules中的模块是那些对速度要求非常严格的模块,而有些对速度没有太严格要求的模块,比如os,就是用Python编写,并放到Lib目录下的。
Parser:该目录中包含了Python解释器中的Scanner和Parser部分,即对Python源代码进行词法分析和语法分析的部分,除了这些,Parser目录下还包含了一些有用的工具,这些工具能够根据Python的语言的语法自动生成Python语言的词法和语法分析器,与YACC非常类似。
Objects:该目录中包含了所有Python的内奸对象,包括整数、list、dict等。同时,该目录还包括Python在运行时需要的所有内部使用对象的实现。
Python:该目录下包含了Python解释器中的Compiler和执行引擎部分,是Pyton运行的核心所在。
PCBuild:包含了Visual Studio 2003的工程文件,研究Python源码就从这里开始。
PCBuild8:包含了Visual Studio 2005使用的工程文件。
 
Python各个函数的作用
Objects/intobject.c/int_print         此函数是用于python整型类型的标准输出  
Objects/intobject.c/int_repr          此函数是用于IDLE整型类型的标准输出 
__builtins__.__dict__['int']              查看内建数据类型
 
 
tp_as_number 指向PyNumberMethods,定义一个是数值的对象
tp_as_number        指向PyNumberMethods,定义一个是数值的对象
tp_as_sequence      指向PySequenceMethods,定义一个序列对象
tp_as_mapping       指向PyMappingMethods,定义一个关联对象
 
 
三个对象属性可以同时存在例子:
 
>>> class MyInt(int):
...      def __getitem__(self,key):
...            return key+str(self)
...
>>>
>>> a=MyInt(1)
>>> b=MyInt(2)
>>> print(a+b)
3
>>> print(a['key'])
key1
 
 
 
 Python源码剖析需要准备的环境
1.需要安装vs2005
2.需要下载python2.5源码程序
 
下面我已经把需要的东西传到网盘,需要的请自行下载
https://pan.baidu.com/s/1miXKSFu
 
如有兴趣学习源码,愿意交流,请加QQ群:637040667

最新文章

  1. Servlet、Filter、Listener、Interceptor
  2. Javassist 字节码操作
  3. jquery指index
  4. Android studio 提高导入项目的速度
  5. linux学习笔记一----------文件相关操作
  6. 战胜C语言中令人头疼的问题
  7. VS2012更改项目编译后文件输出目录
  8. uuid-不好之处
  9. Android开发之源码:多次点击事件的原理和实现
  10. [Guava官方文档翻译] 6. 用Guava辅助Throwable异常处理 (Throwables Explained)
  11. Dynamips/Dynagen模拟CISCO路由环境
  12. 基于visual Studio2013解决C语言竞赛题之0405阶乘求和
  13. JSF中run项目时候Tomcat8启动不了的一种方法
  14. HDU 5288 OO’s Sequence
  15. boke例子:用户登录
  16. Flutter:修改TextField的高度,以及无边框圆角
  17. wc 命令使用说明
  18. 【刷题】BZOJ 3512 DZY Loves Math IV
  19. android之ExpandableListView 无法展开
  20. 移动端 实现ul横向滚动条

热门文章

  1. IBM WebSphere MQ
  2. shell学习(10)- if的使用
  3. POJ-3352-RoadConstruction(边双联通分量,缩点)
  4. 部署ASP.NET Core应用程序在CentOS 7
  5. CentOS6.5下如何正确下载、安装Intellij IDEA、Scala、Scala-intellij-bin插件、Scala IDE for Eclipse助推大数据开发(图文详解)
  6. 《springcloud 五》springcloud stream
  7. 《springcloud 二》微服务动态网关,网关集群
  8. [转]兼容各个浏览器的H.264播放: H.264+HTML5+FLOWPLAYER+WOWZA+RMTP
  9. JAVA基础之File类
  10. JavaScript 函数(方法)