代码改变世界

Python学习笔记《Python核心编程》第4章Python对象

2013-01-14 21:24  VVG  阅读(620)  评论(0编辑  收藏  举报

所有的python对象都拥有三个特性:身份,类型和值

     身份:每个对象都有一个唯一的身份标识自己,可以使用内建函数id()来得到,这个值被认为是该对象的内存地址;——只读

     类型:对象的类型决定了该对象可以保存什么类型的值,可以进行什么操作,可以用内建函数type()查看对象的类型,type()返回的也是对象(类型也是对象);——只读

     值:对象标识的数据项

python标准类型:

     数字    Interger/整型    Boolean/布尔型     Long integer/长整型     Floating point real number/浮点型    Complex number/复数型

    String/字符串    List/列表    Tuple/元组    Dictionary/字典

python其它内建类型

    类型对象    None ——Python的Null对象    文件   集合/固定集合    函数/方法    模块    类

内部类型:

     代码对象——是变异过的Python源代码片段,是可执行对象。通过调用内建函数compile()可以得到代码对象,代码对象可以被exec命令或eval()内建函数执行。

     帧对象——标识python的执行栈帧。

     跟踪记录对象——当代码出错时,python就会引发一个异常。当异常发生日,一个异常的栈跟踪信息的跟踪记录对象被创建。

     切片对象——当使用python扩展的切片语法是,就会创建切片对象。扩展的切片语法允许对不同的索引切片操作,包括步进切片、多维切片和省略切片。

     省略对象——用于扩展切片语法,起记号作用。

     XRange对象——用于需要节省内存使用火range()无法完成的超大数据场合。

标准类型操作符

    对象值比较:返回布尔值True或者False,数字类型根据数字的大小和符号比较,字符串按照字符序列值进行比较。

    对象身份比较:比较是否是同一个对象的引用

          a is b 等价于 id(a)==id(b)————is 与 not标识符都是python关键字

布尔类型:布尔逻辑操作符and or not 都是Python关键字,not优先级最高。          

x,y = 3.1415926536,-1024

x<5.0   #True

not (x<5.0)    #False

(x<5.0) or (y > 2.7)    #True

(x<5.3) and (y> 2.7)   #False

not (x is y)    #True

注: Python中的整型对象和字符串对象时不可变对象,Python的变量都指针都是指向的同一个对象,比如:

       a = 4; b = 4;  a is b         #输出True     id(a) == id(b) 为True

       a = 'abc'; b = 'abc';   a is b    #输出True     id(a) == id(b) 为True

标准类型内建函数:

     python提供了一些内建函数用于这些基本对象类型:cmp()、repr()、str()、type()和等同于repr()函数的单反引号(``)操作符,详细如下:

     type() : 用法为type(object),接受一个对象作为参数,并返回它的类型。它返回的值也是以个类型对象。貌似前面已经写到过了;

          type('abc')       #返回<type 'str'>

          type(5)            #返回<type 'int'>

     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!!'

     cmp() :    用于比较两个对象obj1 和 obj2。如果obj1 < obj2,则返回一个负整数,如果obj1>obj2,则返回一个正整数,如果相等则返回0

     str() 和 repr()或反引号操作符``作用为以字符串的方式获取对象的内容、类型、数值属性等信息。str()获得的字符串可读性号,而repr()函数得到的字符串通常可以用来重新获得该对象,即:obj == eval(repr(obj)) 这个等式成立。     

x = [0,5,0,9]
x == eval(repr(x))   #True
x == eval(`x`)       #True

一句话总结:repr()输出对python比较友好,而str()的输出对用户比较友好。虽然如此,很多情况下这三者输出仍然都是完全一样的。

工厂函数:它们看起来想函数,实际上它们是类,调用它们的时候实际上是生成了改类型的一个实例 !如:

int()      long()      float()     complex()      str()       unicode()      basestring()       list()       tuple()        type()

dict()    bool()       set()       frozenset()     object()     classmethod()        staticmethod()      super()       property()       file()     

 

以存储模型为标准的类型分类:

      标量/原子类型:   数值,字符串

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

以更新模型为标准的类型分类:

      可变类型:列表、字典

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

以方位模型为标准的类型分类:

      直接访问:数字

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

      映射访问:字典

 本章结束