Python学习笔记-Python对象

来源:互联网 发布:在线美工兼职 编辑:程序博客网 时间:2024/04/24 16:10


第四章Python对象

1、python对象

所有python对象都有三个特性:身份、类型、值

身份:对象的唯一标识,可以认为是对象的内存地址。使用id()函数可以获得,很少使用;

类型:决定python对象保存什么类型的值,进行什么类型的操作,遵循什么规则,用type();

值:对象表示的数据值。

在对象创建的时候,对象的身份、类型、值就被赋值,身份和类型是只读的,值可以改变。

>>> a = 3

>>> id(a)

31237160L

>>> type(a)

<type 'int'>

>>> a = '3'

>>> id(a)

36172904L

>>> type(a)

<type 'str'>

如果对象的值支持更新操作,就可以改变,否则就是只读的。对象的值是否可以更改称为对象的可改变性。

2、标准类型(基本数据类型)

z  数字(int(有符号整数)long(长整数) bool(布尔值)float(浮点值) complex(复数)其中,int ,long, bool 是整数类型)

z  整型

z  布尔型

z  长整型

z  浮点型

z  复数型

z  字符串                               

z  列表

z  元组

z  字典

3、其他内建类型

z  类型

z Null 对象 (None)

z  文件

z  集合/固定集合

z  函数/方法

z  模块

z  类

(1)类型对象和type类型对象

>>> type(3)

<type 'int'>

>>> type(type(3))

<type 'type'>

<type 'int'>是一个类型对象,他告诉你3是个int型的对象。那类型对象的类型是什么呢?<type 'type'>

是type,所有类型对象的类型都是type。

(2)Null对象:他只有一个值:None,且None的bool值总是False.和None类型接近的就是C中的void,None类型的和C中的NULL值相似。

核心笔记:布尔值

所有标准对象均可用于布尔测试,同类型的对象之间可以比较大小。每个对象天生具有布

尔 True 或 False 值。空对象、值为零的任何数字或者Null对象None的布尔值都是 False。

下列对象的布尔值是 False。

z None

z False (布尔类型)

z  所有的值为零的数:                             

0 (整型)

0.0(浮点型)

0L (长整型)

0.0+0.0j (复数)

z "" (空字符串)

z  [](空列表)

z  ()(空元组)

z  {}(空字典)

值不是上面列出来的任何值的对象的布尔值都是True,例如 non-empty、non-zero等等。

用户创建的类实例如果定义了nonzero(__nonzero__())或 length(__len__())且值为0,那么它们的布尔值就是False。

5、标准类型运算符

(1)对象值比较

多个比较操作可以在同一行上进行,求值顺序为从左到右。

>>> 3 < 4 < 7 # same as ( 3< 4 ) and ( 4 < 7 )

True

>>> 4 > 3 == 3 # same as ( 4> 3 ) and ( 3 == 3 )

True

>>> 4 < 3 < 5 != 2 < 7

False

(2)对象身份比较

e.g1:

fool1 = fool2 = 4.3

含义:它与以往的多重赋值不同。一个值为4.3的数字类型的对象被创建,然后这个对象的引用被赋值给fool1和fool2,现在fool1和fool2指向同一块内存区域

 

e.g2:

fool1 = 4.3       fool2 = fool1

一个值为4.3的数字对象被创建并且指向fool1,在执行fool2 = fool1时,fool2被指向fool1指向的同一个对象,因为python通过传递引用来处理对象。它的示意图和上图一样。

(3)对象就象一个装着内容的盒子。当一个对象被赋值到一个变量,就象在这个盒子上

贴了一个标签,表示创建了一个引用。每当这个对象有了一个新的引用,就会在盒子上新贴一张标签。当一个引用被销毁时,这个标签就会被撕掉。当所有的标签都被撕掉时,这个盒子就会被回收。

(4) Python提供了is和is not 运算符来测试两个变量是否指向同一个对象

a is b 等价于 id(a) == id(b) 功能:a 和 b是同一个对象

a is not b 等价于id(a) != id(b) 功能:a 和 b不是同一个对象

>>> a = b = 3

>>> print a is b

True

>>> a = 5

>>> b = a

>>> print a is b

True

6、标准类型内建函数

函数                                     功能

cmp(obj1, obj2)                  比较obj1和obj2,根据结果返回整数i

                                               若obj1 <obj2  –>  i < 0

                                               若obj1 >obj2  –>  i > 0

                                               若obj1==obj2  –>  i == 0

repr(obj)或’obj’                  返回一个对象的字符串表示

str(obj)                                返回对象可读性好的字符串表示

type(obj)                              得到对象的类型,并返回相应的type对象

函数详解:

type() 接受一个对象做为参数,并返回它的类型。它的返回值是一个类型对象。

str() 致力于生成一个对象的可读性好的字符串表示,它的返回结果通常无法用于eval()求值,但很适合用于print 语句输出。

repr() 和 `` 做的是完全一样的事情,它们返回的是一个对象的“官方”字符串表示。

type函数与isinstance函数:

#!/usr/bin/env python

def displayNumType(num):

print num, 'is',

if isinstance(num, (int, long, float,complex)):

print 'a number of type:',type(num).__name__

else:

print 'not a number at all!!'

 displayNumType(-69)

displayNumType(9999999999999999999999L)

displayNumType(98.6)

displayNumType(-5.2+1.9j)

displayNumType('xxx')

/////////////////////////////////////////////////

def displayNumType(num):

print num, "is",

if type(num) == type(0):

print 'an integer'

elif type(num) == type(0L):

print 'a long'

elif type(num) == type(0.0):

print 'a float'

elif type(num) == type(0+0j):

print 'a complex number'

else:

print 'not a number at all!!

8、标准类型分类

(1)存储模型:

分类                                   Python类型

标量/原子类型               数值(所有的数值类型),字符串(全部是文字)

容器类型                          列表、元组、字典

(容器存储:可容纳多个对象的类型)

(2)更新模型:

分类                          Python类型

可变类型                列表, 字典

不可变类型            数字、字符串、元组

(3)访问模型

根据访问数据的方式进行分类。有直接存取、顺序、映射。

分类                                   Python类型

直接访问                          数字

顺序访问                          字符串、列表、元组

映射访问                          字典

对非容器类型可以直接访问;

序列类型是指容器内的元素按从0开始的索引顺序访问。一次可以访问一个元素或多个元素,也就是大家所了解的切片(slice)。字符串、列表和元组都归到这一类,字符串也是。

映射类型,容纳的是哈希键-值对的集合。

(4)分类的目的:

为什么要对同样的数据类型再三分类呢?首先,我们为什么要分类?因为 Python 提供

了高级的数据结构,我们需要将那些原始的类型和功能强大的扩展类型区分开来。另一个原因就是这有助于搞清楚某种类型应该具有什么行为。举例来说,如果我们基本上不用问自己“列表和元组有什么区别?”或“什么是可变类型和不可变类型?”这些问题的时候,我们也就达到了目的。最后,某些分类中的所有类型具有一些相同的特性。一个优秀的工匠应该知道他或她的工具箱里都有哪些宝贝。

(5)标准类型分类:

数据类型

存储模型

更新模型

访问模型

数字

Scalar(原子)

不可更改

直接访问

字符串

Scalar

不可更改

顺序访问

列表

Container(容器)

可更改

顺序访问

元组

Container

不可更改

顺序访问

字典

Container

可更改

映射访问

9、不支持的类型

(1)char或byte。Python没有char或byte类型来保存单一字符或8比特整数,可以使用长度为1的字符串来表示。

(2)指针。

练习:

4.1:身份、类型、值

4.2:不可更改指对象的值是不可更改的。可更改的有:列表和字典;不可更改的有:数字、字符串、元组。

4.3:字符串、列表、元组是按照顺序访问。它的元素有序存放,顺序访问的索引是按照数字偏移量取值;映射类型的元素是无序存放,它容纳的是哈希-键值对的集合。

4.4:接受一个对象做参数,返回它的类型。返回的是一个类型对象。

4.5:str输出的是一个可读性较好的字符串。它的返回结果通常无法用于eval()求值,但很适合用于print 语句输出。repr返回的是一个官方的字符串表示。Repr等价有反引号。

4.6:type(a) is type(b) 等价于id(type(a)) == id(type(b))

4.8:

数据类型

存储模型

更新模型

访问模型

列表

Container(容器)

可更改

顺序访问

元组

Container

不可更改

顺序访问

4.9:true true false

本文为xyw_Eliot原创,转载请注明出处:http://blog.csdn.net/xyw_eliot/article/details/8295965
原创粉丝点击