Python对象
Python使用对象模型来存储数据。构造任何类型的值都是一个对象
三个特性:
身份:每一个对象都有一个唯一的身份标识自己,任何对象的身份可以使用内建函数id()来得到。这个值可以被认为是该对象的内存地址
类型:对象的类型决定了该对象可以保存什么类型的值,可以进行说明样的操作以及遵循什么样的规则。可以用内建函数type()查看Python对象的类型。因为Python中类型也是对象,所以type()返回的是对象而不是简单的字符串
值:对象表示的数据项
这三个特性在对象创建的时候就被赋值,除值之外,其他两个特性都是只读的。对新式类型和类,对象的类型也是可以改变的,不建议初学者这样做
代码对象
代码对象是编译过的Python源代码片段,它是可执行对象。通过调用内建函数compile()可以得到代码对象。代码对象可以被exec命令或eval()内建函数来执行。
代码对象本身不包含任何执行环境信息,它是用户自定义函数的核心,在被执行时动态的获得上下文。(事实上代码对象是函数的一个属性)一个函数除了有代码对象属性以外,还有一些其他函数必须的属性。包括函数名、文档字符串、默认参数、及全局命名空间等。
帧对象
帧对象表示Python的执行栈帧。帧对向包含了Python解释器在运行时所需要知道的所有信息。它的属性包括指向上一帧的链接,正在被执行的代码对
象,本地及全局名称空间字典及当前指令等。每次函数调用产生一个新的帧,每一个帧对象都会相应创建一个C栈帧。用到帧对象的一个地方是跟踪记录对象。
跟踪记录对象
当你的代码出错时,Python就会引发一个异常。如果异常未被捕获和处理,解释器就会退出脚本运行,显示诊断信息
当异常发生时,一个包含针对异常的栈跟踪信息的跟踪记录对象被创建。如果一个异常有自己的处理程序,处理程序就可以访问这个跟踪记录对象。
切片对象
当使用Python扩展的切片语法时,就会创建切片对象。扩展的切片语法允许对不同的索引切片操作,包括步进切片、多维切片和省略切片。切片对象也可以由内建函数slice()来生成。
省略对象
省略对象用于扩展切片语法中,起记号作用。这个对象在切片语法中表示省略号。类似Null对象None,省略对象有一个唯一的名字Ellipsis,它的布尔值始终未True。
xrange对象
调用内建函数xrange()会生成一个Xrange对象,xrange()是内建函数range()的兄弟版本。用于需要节省内存使用或range()无法完成的超大数据集场合。
标准类型内建函数
函数 | 功能 |
cmp(obj1,obj2) | 比较obj1和obj2,根据比较结果返回整型i: i < 0 if obj1 < obj2 ; i > 0 if obj1 > obj2 ; i = 0 if obj1 = obj2 |
repr(obj)或`obj` | 返回一个对象的字符串表示 |
str(obj) | 返回对象适合可读性好的字符串表示 |
type(obj) | 得到一个对象的类型,并返回相应的type对象 |
类型工厂函数
Python2.2统一了类型和类,所有的内建类型现在也都是类,在这基础之上,原来的所谓内建转换函数想init()、type()、list()等,现在都成了工厂函数。
标准类型的分类
“基本” 是指这些类型都是Python提供的标准或核心类型
“内建” 是由于这些类型是Python默认就提供的
“数据” 是因为他们用于一般数据存储
“对象” 是因为对象是数据和功能的默认抽象
“原始” 是因为这些类型提供的是最底层的粒度数据存储
“类型” 是因为他们就是数据类型
存储模型
分类 | Python类型 |
标量/原子类型 | 数值(所有的数值类型)、字符串(全部是文字) |
容器类型 | 列表、元组、字典 |
更新模型
分类 | Python类型 |
可变类型 | 列表、字典 |
不可变类型 | 数字、字符串、元组 |
访问模型
分类 | Python类型 |
直接访问 | 数字 |
顺序访问 | 字符串、列表、元组 |
映射访问 | 字典 |
Python不支持的类型
char或byte:Python没有char或byte类型来保存单一字符或8位整型。你可以使用长度为1的字符串表示字符或8位整型
指针:Python替你管理内存,因此没必要访问指针。在Python中,一切都是指针
int vs short vs long:Python的普通整型相当于标准整型类型,不需要类似C语言中的这三种整型
float vs double:C语言有单精度和双精度两种浮点类型。Python的浮点类型实际上是C语言的双精度浮点类型
Mon Mar 25 11:32:58 CST 2013