【2】python核心编程 第四章-python对象
1、python对象
所有的Python 对像都拥有三个特性:身份,类型和值。
身份:
每一个对象都有一个唯一的身份标识自己,任何对象的身份可以使用内建函数id()来得到。
这个值可以被认为是该对象的内存地址。您极少会用到这个值,也不用太关心它究竟是什么。
类型
对象的类型决定了该对象可以保存什么类型的值,可以进行什么样的操作,以及遵循什么样的规则。您可以用内建函数type()查看Python 对象的类型。因为在Python 中类型也是对象(还记得我们提到Python 是面向对象的这句话吗?),所以type()返回的是对象而不是简单的字符串。
值
对象表示的数据项
2、布尔值
所有标准对象均可用于布尔测试,同类型的对象之间可以比较大小。每个对象天生具有布 尔 True 或 False 值。空对象、值为零的任何数字或者Null 对象 None 的布尔值都是False。 下列对象的布尔值是False。 None False (布尔类型) 所有的值为零的数: 0 (整型) (浮点型) 0L (长整型) 0.0+0.0j (复数) "" (空字符串) [] (空列表) () (空元组) {} (空字典) 值不是上面列出来的任何值的对象的布尔值都是 True,例如non-empty、 non-zero 等等。 用户创建的类实例如果定义了nonzero(__nonzero__())或length(__len__())且值为0,那 么它们的布尔值就是 False。
3、标准类型内建函数
1 除了这些运算符, 我们刚才也看到, Python 提供了一些内建函数用于这些基本对象类型: 2 cmp(), repr(), str(), type(), 和等同于repr()函数的单反引号(``) 运算符。 3 表4.4 标准类型内建函数 4 函数 功能 5 cmp(obj1, obj2) 比较 obj1 和 obj2, 根据比较结果返回整数 i: 6 i < 0 if obj1 < obj2 7 i > 0 if obj1 > obj2 8 i == 0 if obj1 == obj2 9 repr(obj) 或 `obj` 返回一个对象的字符串表示 10 str(obj) 返回对象适合可读性好的字符串表示 11 type(obj) 得到一个对象的类型,并返回相应的type 对象
4、为什么我们有了repr()还需要``
1 在Python 学习过程中,你偶尔会遇到某个运算符和某个函数是做同样一件事情。之所以如 2 此是因为某些场合函数会比运算符更适合使用。举个例子, 当处理类似函数这样的可执行对象 3 或根据不同的数据项调用不同的函数处理时,函数就比运算符用起来方便。另一个例子就是双 4 星号(**)乘方运算和pow()内建函数,x ** y 和 pow(x,y) 执行的都是x 的y 次方。
5、判断对象类型
1 class objA: 2 pass 3 4 A = objA() 5 B = 'a','v' 6 C = 'a string' 7 8 print isinstance(A, objA) 9 print isinstance(B, tuple) 10 print isinstance(C, basestring)
6、以更新模型为标准的类型分类
1 更新模型 2 分类 Python 类型 3 可变类型 列表, 字典 4 不可变类型 数字、字符串、元组
1 x = 'Python numbers and strings' 2 x = 'are immutable?!? What gives?' 3 i = 0 4 i = i + 1 5 解释:一个新对象被创建,然后它取代了旧对象
7、访问模型中三种访问方式:直接存取,顺序,和映射
1 对非容器类型可以直接访问。所有的数值类型都归到这一类。 2 序列类型是指容器内的元素按从0 开始的索引顺序访问。一次可以访问一个元素或多个元 3 素, 也就是大家所了解的切片(slice)。字符串, 列表和元组都归到这一类。我们前面提到过, 4 Python 不支持字符类型,因此,虽然字符串是简单文字类型,因为它有能力按照顺序访问子字 5 符串,所以也将它归到序列类型。 6 映射类型类似序列的索引属性,不过它的索引并不使用顺序的数字偏移量取值, 它的元素 7 无序存放, 通过一个唯一的key 来访问, 这就是映射类型, 它容纳的是哈希键-值对的集合。
1 分类 Python 类型 2 直接访问 数字 3 顺序访问 字符串、列表、元组 4 映射访问 字典
1 数据类型 存储模型 更新模型 访问模型l 2 数字 Scalar 不可更改 直接访问 3 字符串 Scalar 不可更改 顺序访问 4 列表 Container 可更改 顺序访问 5 元组 Container 不可更改 顺序访问 6 字典 Container 可更改 映射访问