学习《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

python源码剖析学习记录-01的更多相关文章

  1. Python源码剖析——01内建对象

    <Python源码剖析>笔记 第一章:对象初识 对象是Python中的核心概念,面向对象中的"类"和"对象"在Python中的概念都为对象,具体分为 ...

  2. Python源码剖析|百度网盘免费下载|Python新手入门|Python新手学习资料

    百度网盘免费下载:Python源码剖析|新手免费领取下载 提取码:g78z 目录  · · · · · · 第0章 Python源码剖析——编译Python0.1 Python总体架构0.2 Pyth ...

  3. Python 源码剖析(一)【python对象】

    处于研究python内存释放问题,在阅读部分python源码,顺便记录下所得.(基于<python源码剖析>(v2.4.1)与 python源码(v2.7.6)) 先列下总结:      ...

  4. Python 源码剖析 目录

    Python 源码剖析 作者: 陈儒 阅读者:春生 版本:python2.5 版本 本博客园的博客记录我会适当改成Python3版本 阅读 Python 源码剖析 对读者知识储备 1.C语言基础知识, ...

  5. Python源码剖析——02虚拟机

    <Python源码剖析>笔记 第七章:编译结果 1.大概过程 运行一个Python程序会经历以下几个步骤: 由解释器对源文件(.py)进行编译,得到字节码(.pyc文件) 然后由虚拟机按照 ...

  6. 【Python源码剖析】对象模型概述

    Python 是一门 面向对象 语言,实现了一个完整的面向对象体系,简洁而优雅. 与其他面向对象编程语言相比, Python 有自己独特的一面. 这让很多开发人员在学习 Python 时,多少有些无所 ...

  7. Python 源码剖析(六)【内存管理机制】

    六.内存管理机制 1.内存管理架构 2.小块空间的内存池 3.循环引用的垃圾收集 4.python中的垃圾收集 1.内存管理架构 Python内存管理机制有两套实现,由编译符号PYMALLOC_DEB ...

  8. 侯捷STL课程及源码剖析学习1

    1.C++标准库和STL C++标准库以header files形式呈现: C++标准库的header files不带后缀名(.h),例如#include <vector> 新式C hea ...

  9. 《python源码剖析》笔记一——python编译

    1.python的架构: 2.python源码的组织结构: 3.windows环境下编译python:

随机推荐

  1. 黑马学习SpringMVC bug集锦X1

  2. 从各处收集的switch语句

    重构之重复代码: 1.(重复代码是)语义一致的逻辑 反例:语义一致的逻辑产生了多个实体 缺点:如果你为语义一致的逻辑产生了多个实体,那么当需要修改这个逻辑时,你必须保证同时修改所有的实体,并确保它们是 ...

  3. Codeforces 183A(坐标系性质)

    自从开始写上古场以后我就不断地写A.B题的题解了??? cf problem183A 无论每轮有哪几种选择,最后的可能结果放在一起一定是个钻石型,最后答案就是长方形长乘宽. 非常神奇的性质,如果走了e ...

  4. 命令行下载工具 wget

    wget 是一个简单而强大的跨平台命令行下载工具,包括 Windows 也有对应的版本.全称 GNU Wget,属于 GNU 计划的一部分,自由软件.支持 HTTP.HTTPS 和 FTP 协议,可在 ...

  5. 熔断 降级(polly)

    熔断 降级(polly) https://www.cnblogs.com/szlblog/p/9300845.html1.熔断降级的概念: 熔断:我这里有一根长度一米的钢铁,钢铁的熔点1000度(假设 ...

  6. Canada Cup 2016 D. Contest Balloons 好题。优先队列 + 简单贪心

    http://codeforces.com/contest/725/problem/D 这题一看就是贪心的了,w - t最小的那个,肯定是优先打死. 但是一直都不会写,为什么呢,因为这个太像二分答案了 ...

  7. C. Epidemic in Monstropolis

    http://codeforces.com/contest/733/problem/C 一道很恶心的模拟题. 注意到如果能凑成b[1],那么a的前缀和一定是有一个满足是b[1]的,因为,如果跳过了一些 ...

  8. ruby 正则表达式 ruby-doc原文

    原文链接:http://www.ruby-doc.org/core-1.9.3/Regexp.html Regexp A Regexp holds a regular expression, used ...

  9. sqlserver 删除两种方法比较

    delete from tb where id=1    删除数据 truncate table  tb where id=1  第一种 自增长id不会删除,第二种会删除

  10. .net memcache

    非常感谢csdn及冷月宫主让我很快学会了.net操作 memcache 文章转自:http://download.csdn.net/detail/e_wsq/4358982 C#存取Memcache的 ...