python源码剖析 0-1章

第0章 准备工作

python总体架构

python整体架构主要可以分为三部分
1. 模块(内置模块,库,用户自定义模块)
2. python运行时环境,包括对象/类型系统(list,dict,用户自定义对象等),内存分配器(创建对象时对内存的申请)和运行时状态信息(解释器的状态,比如正常,异常等)
3. 解释器(词法分析[将python源代码切分为token]–>语法分析[建立抽象语法树AST]–>生成指令集合[根据AST生成字节码]–>执行字节码)

python部分目录结构

include:C或C++的头文件
Lib:python自带的标准库
Modules:C语言编写的模块,这些模块对速度要求一般比较严格,而一般的模块比如os,就是用python编写,放在Lib下
Objects:包含了python内建对象

第一章 python对象初探

静态初始化:C中的结构体在编译的时候就初始化

堆:一个完全二叉树的实现……………..

python中一个对象一旦被创建,它在内存中的大小就是不变的了,这就意味着那些需要容纳可变长度数据的对象需要维护一个指向一块可变大小内存区域的指针

python中,对象机制的核心有两个,一是引用计数,二是类型信息

C中是没有字符串的概念的的,所以维护一个字符串对象,其实是维护n个char对象,所以python中字符串属于序列

对象的行为
class MyInt(int):
    def __getitem__(self, key):
        return key + str(self)

a = MyInt(1)
b = MyInt(2)

print a + b

print a['key']

PyTypeObject中定义了大量的函数指针,它们指定对象不同的操作信息。

函数指针tp_as_number,tp_as_sequence,tp_as_mapping分别指向PyNumberMethod,PySequenceMethod,PyMappingMethod函数族

MyInt是一个数值对象,但a['key']是一个类似于dict这样的对象才有的操作。这是因为重写了__getitem__这个特殊方法,这个重写可以视为指定了MyInt在Python内部对应的PyTypeObject对象的tp_as_mapping.mp_subscript操作,最终使MyInt表现的像一个关联对象
Python对象的分类(一种思路)

Fundamental对象:类型对象,即type
Numeric对象:数值对象
Sequence对象:序列集合对象
Mapping对象:dict
Internal对象:Python虚拟机在运行时内部使用的对象

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值