简介:
python程序中保存的所有数据都是围绕对象这个概念来构建的。对象包括一些基本的数据类型,如数字、字符串、列表、字典。但也可以通过类的形式创建用户定义的对象。
python 使用对象模型来存储数据。构造任何类型的值都是一个对象。
所有的 Python 对像都拥有三个特性:身份,类型和值。
身份:
每一个对象都有一个唯一的身份标识自己,任何对象的身份可以使用内建函数 id()来得到。 这个值可以被认为是该对象的内存地址。您极少会用到这个值,也不用太关心它究竟是什么。
类型
对象的类型决定了该对象可以保存什么类型的值,可以进行什么样的操作,以及遵循什么样的规则。您可以用内建函数 type()查看 Python 对象的类型。因为在 Python 中类型也是对象,所以 type()返回的是对象而不是简单的 字符串。
值
对象表示的数据项
上面三个特性在对象创建的时候就被赋值,除了值之外,其它两个特性都是只读的。对于 新风格的类型和类, 对象的类型也是可以改变的。
【1】对象属性
用“.”(点语法)可以访问到对象的属性
a = 1 + 2j #创建一个复数 r = a.real #获得实部(属性) #1.0 b = [0,1,2] #创建一个列表 b.append(3) #使用append方法为列表添加一个新元素 #[0, 1, 2, 3]
【2】标准类型
- 数字 Numbers (数字:可以分为int(有符号数型)、long(长整形)、float(浮点型)、complex(复数型))
- 布尔型(true、false)
- 字符串 String
- 列表 List
- 元组 Tuple
- 字典 Dictionary
【3】其他内建类型
- 类型
- Null对象(None)
- 文件
- 集合/固定集合
- 函数/方法
- 模块
- 类
-3.1类型对象和type类型对象
通过调用 type()函数你能够得到特定对象的类型信息:
type(1) #<type 'int'>
不过你应当意识到它并不是一个简简单单的告诉你 42 是个整数这样 的字符串。您看到的<type 'int'>实际上是一个类型对象,碰巧它输出了一个字符串来告诉你 它是个 int 型对象。
所有类型对象的类型都是type
type(type(1)) #<type 'type'>
-3.2None,python的null对象
python有一个特殊的类型,被称作 Null 对象或者 NoneType,它只有一个值,那就是 None。 它不支持任何运算也没有任何内建方法。
None 没有什么有用的属性,它的布尔值总是 False。
所有标准对象均可用于布尔测试,同类型的对象之间可以比较大小。每个对象天生具有布 尔 True 或 False 值。空对象、值为零的任何数字或者 Null 对象 None 的布尔值都是 False。
下列对象的布尔值是 False:
- None
- False (布尔类型)
- 所有的值为零的数: 0 (整型)、(浮点型)、0L (长整型)、0.0+0.0j (复数)
- "" (空字符串)
- [] (空列表)
- () (空元组)
- {} (空字典)
【4】内部类型
-4.1 代码对象
代码对象是编译过的 Python 源代码片段,它是可执行对象。通过调用内建函数 compile() 可以得到代码对象。代码对象可以被 exec 命令或 eval()内建函数来执行。
代码对象本身不包含任何执行环境信息, 它是用户自定义函数的核心, 在被执行时动态 获得上下文。(事实上代码对象是函数的一个属性)一个函数除了有代码对象属性以外,还有一 些其它函数必须的属性,包括函数名,文档字符串,默认参数,及全局命名空间等等。
-4.2 帧对象
帧对象表示 Python 的执行栈帧。帧对象包含 Python 解释器在运行时所需要知道的所有信息。它的属性包括指向上一帧的链接,正在被执行的代码对象(参见上文),本地及全局名字空 间字典以及当前指令等。每次函数调用产生一个新的帧,每一个帧对象都会相应创建一个 C 栈帧。
-4.3 跟踪记录对象
当你的代码出错时, Python 就会引发一个异常。如果异常未被捕获和处理,解释器就会退出脚本运行,显示类似下面的诊断信息:
Traceback (innermost last): File "<stdin>", line N?, in ??? ErrorName: error reason
当异常发生时,一个包含针对异常的栈跟踪信息的跟踪记录对象被创建。如果一个异常有 自己的处理程序,处理程序就可以访问这个跟踪记录对象。
-4.4 切片对象
-4.5 省略对象
省略对象用于扩展切片语法中,起记号作用。 这个对象在切片语法中表示省略号。类似Null 对象 None, 省略对象有一个唯一的名字 Ellipsis, 它的布尔值始终为 True.
-4.6 XRange对象
调用内建函数 xrange() 会生成一个 Xrange 对象,xrange()是内建函数 range()的兄弟版本, 用于需要节省内存使用或 range()无法完成的超大数据集场合。