第一章、Python对象
1.1、Python对象
Python使用对象模型来存储数据。
所有的Python对象都有三个特性:身份、类型和值。
身份可以使用内建函数id()得到;类型可以使用内建函数type()查看。
1.2、标准类型
- 数字
- 整形 Integer
- 布尔型 Boolean
- 长整形 Long integer
- 浮点型 Floating point real number
- 复数型 Complex number
- 字符串 String
- 列表 List
- 元组 Tuple
- 字典 Dictionary
1.3、其他内建类型
- 类型
- Null 对象
- 文件
- 集合/固定集合
- 函数/方法
- 模块
- 类
1.3.1 类型对象和type类型对象
例如
>>> type(21)
<type 'int'>
1.3.2 None Python的None对象
None不支持任何运算也没有任何内建方法。
所有标准对象均可用于布尔测试,同类型的对象可以比较大小。每个对象天生具有布尔值。
下列对象的布尔值是False。
* None
* False(布尔类型)
* 所有值为0的数
* 空字符串””
* 空列表 []
* 空元组 ()
* 空字典 {}
1.4、内部类型
- 代码
- 帧
- 跟踪记录
- 切片
- 省略
- Xrange
注:异常是用类来实现的
1.4.1、代码对象
代码对象是编译过的python源代码片段,是可执行对象。
通过调用compile()可以得到代码对象。
代码对象可以被exec命令或eval()内建函数来执行。
1.4.2 帧对象
帧对象表示python的执行栈帧。
帧对象包含python解释器在运行时所需要知道的所有信息。它的属性包括指向上一帧的链接,正在被执行的代码,本地及全局名称空间字典及当前指令等。
每次函数调用产生一个新的帧,每一个帧对象都会相应创建一个C栈帧。
用到帧对象的一个地方是跟踪记录对象。
1.4.3 跟踪记录对象
代码出错时,python会引发一个异常。
如果异常未被捕获和处理,解释器会退出脚本运行,显示诊断信息。
Traceback (innermost last):
File "<stdin>", Line N? in ???
ErrorName: error reason
异常发生时,一个包含针对异常的栈跟踪信息的跟踪记录对象被创建。
如果有异常处理程序,处理程序就可以访问这个跟踪记录。
1.4.4、切片对象
切片语法:
* seqnence[start1:end1, start2:end2]
* sequence[…, start1:end1]
* slice() 内建函数
* sequence[start:end:步进值] 步进切片
>>> foostr = 'abcde'
>>> foostr[::-1]
'edcba'
>>> foostr[::-2]
'eca'
>>> foolist = [123, 'xba', 342.23, 'abc']
>>> foolist[::-1]
['abc', 342.23, 'xba', 123]
1.4.5 省略对象
省略对象用于扩展切片中,起记号作用。
这个对象在切片语法中表示省略号。类似于Null对None,省略对象有一个唯一的名字Ellipsis,它的布尔值始终为True。
>>> print(...)
Ellipsis
1.4.6、XRange对象
内建函数xrange()会产生一个Xrange对象。
时range()函数的兄弟版本。
1.5、标准类型操作符
5.1、对象值的比较
所有的内建类型均支持比较运算。
1.5.2、对象身份比较
python提供了is和is not操作符来测试两个变量是否指向同一个对象。
a is b
id(a) == id(b) #两个表达式的意义相同
注:整形对象和字符串对象是不可变对象,所以python会缓存它们。
>>> a = 1
>>> id(a)
1234567
>>> b = 1
>>> id(b)
1234567
>>>