第4章开始我们来python核心。
4.1python对象
python使用对象模型来存储数据。任何类型的值都是对象。
所有python对象都有三个特性:ID,类型,值。
id:每个对象的唯一标识符,一般认为是内存地址。一般用不到
类型:类型决定了对象可以保持的值的类型,可以使用的操作符以及使用规则。甚至,类型也是一个对象。。。。。
值:对象表示的数据
python使用点操作符来访问对象属性。常见属性有:数据,函数,方法。
特殊类型
type类型,对象的类型本身就是一个对象,这个对象的类型为type。这个对象记录着该类型的元数据(可以进行的操作,规则之类)。而且,type是所有python类型的根和所有python标准类得默认元类。
None,对应C中的void与null。对其取布尔,总返回false。
4.4内部类型
代码,帧,跟踪记录,切片,省略,Xrange。这些类型一般不会直接接触。
代码对象
代码对象就是经python系统编译过的python代码片段,是一个可执行对象通过调用内部函数compile()可以得到代码对象,可以被exec或eval执行。(这里建议对照《python源码剖析》阅读理解)代码对象不包含任何执行上下文。在执行时才动态获得上下文。事实上,代码对象是函数对象的一个属性。
帧对象
帧对象表示python的执行栈帧,帧对象包含python解释器在运行时所需知道的所有信息。它的属性包括向上一帧的链接,正在执行的代码对象,本地及全局名字空间字典以及当前指令等。每一个帧对象对应创建一个C栈帧。
跟踪记录对象
当代码出错时,python会抛出异常,如果异常没有被捕获和处理,解释器就会退出代码的执行,然后创建一个包含栈跟踪信息的跟踪记录对象,然后就可以交给用户的异常处理程序,处理程序可以访问这个跟踪记录对象。
切片对象
当使用切片操作时,都会产生一个切片对象。
省略对象
省略对象用于切片中起记号作用。省略对象有一个唯一的名字ellipsis,布尔值始终为true。
XRange对象
XRange就会产生一个XRange对象,用于需要内存使用或range无法完成的超大数据集场合。
4.5标准类型运算符
对象值的比较
比较运算符可以判断同类型对象是否相等。所以,比较运算符是比较对象的值,而不是对象本身。
对象身份比较
使用is运算符比较对象本身是否同一个。
4.6标准类型内建函数
cmp(obj1,obj2) 比较obj1和obj2,obj1和obj2的大小关系与返回值和0的关系一致。。如果是自定义类型,可以自己编写__cmp()__方法以使用此内建函数
repr(obj)返回一个对象的字符串表达,一般情况下obj==eval(repr(obj))
str(obj)返回一个对象适合的可读性字符串
type(obj)得到一个对象的类型,isinstance(obj,([type1,type2...]))检测对象是否某个范围的类型中的一个。

4.7类型工厂函数
从python2.2开始,python统一了类型和类,所有的内建类型也是类了。然后原来的内建转换函数也变成工厂函数,所有当调用这些函数时,其实是生成了一个该类型的实例。
4.8标准类型的分类
从不同方面对类型进行分类:
存储模型
标量/原子类型:数值,字符串
容器类型:列表、元组、字典
更新模式
可变类型:列表、字典
不可变类型:数字、字符串、元组
访问类型
直接访问:数字
顺序访问:字符串、列表、元组
映射访问:字典

4.9不支持的类型
char、byte、指针、short、float
浙公网安备 33010602011771号