python对象解释说明以及操作实例

来源:互联网 发布:淘宝哪个母婴店比较好 编辑:程序博客网 时间:2024/05/01 16:09
#coding=utf8 '''Python使用对象模型来存储数据。Python对象都拥有三个特性:身份、类型、值。身份:每一个对象都有一个唯一的身份标识自己,任何对象的身份可以使用内建函数id()来获取。这个值可以被认为是该对象的内存地址。类型:对象的类型决定该对象可以保存什么类型的值,可以进行什么样的操作,以及遵循什么样的规则。可以使用内建函数type查看Python对象的类型。Python中类型也是对象,type返回的对象不是简单的字符串。值:对象表示的数据项。上面三个特性在对象创建的时候就被赋值,除了值之外,其它两个特性都是只读的。对象属性:Python用点(.)标记来访问属性。属性包括相应对象的名字等等。最常用的属性是函数和方法,不过有一些python类型也有数据属性。含有数据属性的对象包括(但不限于):类、类实例、模块、复数和文件。标准类型(基本数据类型):数字、整型、布尔型、长整型、浮点型、复数型、字符串、列表、元组、字典其他内建类型:类型、Null对象(None)、文件、集合/固定集合、函数/方法、模块、类所有类型对象的类型都是type,它是所有Python类型的根和所有Python标准类的默认元类(metaclass)。类就是类型,实例是对应类型的对象。Python有一个特殊的类型,被称作Null对象或者NoneType,它只有一个值,那就None。None没有什么有用的属性,它的布尔值总是False。所有标准对象均可用于布尔测试,同类型的对象之间可以比较大小。每个对象天生具有布尔True或False值。空对象、值为零的任何数字或者Null对象None的布尔值都是False。下列对象的布尔值时False:None、False、所有的值为零的数:0(整型)、浮点型(0.0)、0L(长整型)、0.0+0.0j(复数)、""(空字符串)、[](空列表)、()(空元组)、{}(空字典)值不是上面列出来的任何值的对象的布尔值都是True。内部类型:代码、帧、跟踪记录、切片、省略、Xrange代码:代码对象是编译过的Python源代码片段,它是可执行对象。通过调用内建函数compile()可以得到代码对象。代码队形可以被exec命令或eval()内建函数来执行。代码对象本身不包含任何执行环境信息,它是用户自定义函数的核心,在被执行时动态获得上下文。帧:帧对象表示Python的执行栈帧。帧队形包含Python解释器在运行时所需要知道的所有信息。它的属性包括指向上一帧的链接,正在被执行的代码对象,本地及全局名字空间字典以及当前指令等。每次函数调用产生一个新的帧,每一个帧对象都会相应创建一个C栈帧。跟踪记录:当异常发生时,一个包含针对异常的栈跟踪信息的跟踪记录对象被创建。如果一个异常有自己的处理程序,处理程序就可以访问这个跟踪记录对象。切片对象:当使用Python扩展的切片语法时,就会创建切片对象。扩展的切片语法允许对不同的索引切片操作,包括步进切片、多维切片、省略切片。多维切片的语法是:sequence[start1:end1,start2:end2]省略切片的语法是:sequence[...,start1:end1]切片镀锡可以由内建函数slice()生成。步进切片允许利用第三个切片元素进行步进切片,它的语法是:sequence[起始索引:结束索引:步进值]省略对象:省略对象用于扩展切片语法中,起记号作用。这个对象在切片语法中表示省略号。类似Null对象None,省略对象有一个唯一的名字Ellipsis,它的布尔值始终未True。XRange对象:调用内建函数XRange()会生成一个Xrange对象,xrange()是内建函数range()的兄弟版本。用于需要节省内存使用或range()无法完成的超大数据集场合。对象值比较:比较运算符用来判断同类型对象是否相等。数字类型根据数值的大小和符号比较,字符串按照字符序列值进行比较。多个比较操作可以在同一行上进行,求值顺序为从左向右。比较操作是针对对象的值进行的,也就是说比较的是对象的数值而不是对象本身。标准类型值比较运算符:<、>、<=、>=、==、!=对象身份比较:对象身份比较运算符拥有同样的优先级。标准类型对象身份比较运算符:obj1 is obj2                 obj1和obj2是同一个对象obj1 is not obj2           obj1和obj2不是同一个对象整数对象和字符串队形是不可变对象,Python会很高效的缓存它们。布尔类型:布尔逻辑运算符and、or、not都是python关键字。优先级的从高到低排序:not>and>or标准类型内建函数:python一些内建函数用于基本对象类型:cmp()、repr()、str()、type()、等同于repr()函数的单发引号(``)运算符。-------------------------------------------------------------------------函数                                            功能-------------------------------------------------------------------------cmp(obj1, obj2)             比较 obj1 和 obj2, 根据比较结果返回整数 i:                                        i < 0 if obj1 < obj2                                        i > 0 if obj1 > obj2                                        i == 0 if obj1 == obj2repr(obj) 或 `obj`             返回一个对象的字符串表示str(obj)                             返回对象适合可读性好的字符串表示type(obj)                         得到一个对象的类型,并返回相应的type 对象---------------------------------------------------------------------------str()函数得到的字符串可读性好,而repr()函数得到的字符串通常可以用来重新获得该对象。通常情况下obj==eval(repr(obj))等式成立。repr()和``在绝大多数情况下可以通过求值运算符(使用eval()内建函数)重新得到该对象。并不是所有repr()返回的字符串都能够用eval()内建函数得到原来的对象。type()与isinstance():Python不支持方法或函数重载,因此必须保证调用函数或对象的正确性。type()返回任意Python对象类型,而不局限于标准类型。isinstance(object, class-or-type-or-tuple):对象,对象的类型或者类、或者元组性能调试:---------------------------------------------------------------------------------------------1.    减少函数调用次数:每次函数调用都会付出性能代价,要减少函数调用次数,以提高程序性能。2.    对象比较VS对象身份比较:如果对象是不同的,那么变量一定是不同类型的。每一个类型只有一个类型的对象,就没有必要去检查值了。一次这样的调用可能无关紧要,当程序中有很多时,就会影响程序性能。3.    减少查询次数:如果程序做多次比较的话,程序的性能就会有一些差异。例如,为了得到整数的对象类型,解释器首先要查找types这个模块,然后在该模块字典中查找IntType。但这可以通过使用from-import减少一次查询。------------------------------------------------------------------------------------------------类型工厂函数:int()    long()    float()    complex()    str()    unicode()    basestring()    list()tuple()    type()    dict()    bool()    set()    frozenset()    object()    classmethod()staticmethod()    super()    property()    file()存储模型:-------------------------------------------------------------------------------------------分类                                            python类型-------------------------------------------------------------------------------------------标量/原子类型                            数值(所有的数值类型)、字符串(全部是文字)容器类型                                    列表、元组、字典--------------------------------------------------------------------------------------------更新模型:-------------------------------------------------------------------------------------------分类                                            python类型-------------------------------------------------------------------------------------------可变类型                                        列表、字典不可变类型                                    数字、字符串、元组--------------------------------------------------------------------------------------------访问模型有三种访问方式:直接存取、顺序、映射-------------------------------------------------------------------------------------------分类                                            python类型-------------------------------------------------------------------------------------------直接访问                                       数字顺序访问                                       字符串、列表、元组映射访问                                        字典--------------------------------------------------------------------------------------------标准类型分类:-------------------------------------------------------------------------------------------数据类型                    存储模型            更新模型                访问模型-------------------------------------------------------------------------------------------数字                            Scalar                不可更改                直接访问字符串                        Scalar                 不可更改                顺序访问列表                            Container            可更改                顺序访问元组                            Container            不可更改            顺序访问字典                            Container            可更改                映射访问--------------------------------------------------------------------------------------------'''from types import IntType,DictType,ClassType,ComplexType,ObjectType,BooleanType,StringType,ListTypeclass PythonObject(object):    intType=15    dicType={"name" : 'ewang',"age":intType}    listType=[12,'earn',intType]    toupleType=(456,12.56,'ewang')    complexType=45+5j    float=45.6    boolType=True    stringType="maytheforce"              def cmpType(self,obj):            if type(obj) in (IntType,DictType,ClassType,ComplexType,ObjectType,BooleanType,StringType,ListType):                print obj                            def mulSlice(self,obj,st1,ed1,st2,ed2):        if type(obj) in ["StringType","ListType"]:                return obj[st1:ed1,st2:ed2]        else:            pass            def ellipeseSlice(self,obj,st1,ed1):        if self.checkType(obj) in ["StringType","ListType"]:                return obj[...,st1:ed1]        else:            pass        def stepSlice(self,obj,st1,ed1,step):        if self.checkType(obj) in ["StringType","ListType"]:                return obj[st1:ed1:step]        else:            pass            def valueEqual(self,obj1,obj2):            if obj1==obj2:                return True            else:                return False                def valueLe(self,obj1,obj2):            if obj1<=obj2:                return True            else:                return False                def valueGe(self,obj1,obj2):            if obj1>=obj2:                return True            else:                return False                def valueLt(self,obj1,obj2):            if obj1<obj2:                return True            else:                return False                def valueGt(self,obj1,obj2):            if obj1>obj2:                return True            else:                return False          def valueNe(self,obj1,obj2):            if obj1 != obj2:                return True            else:                return False     def objCmp(self,obj1,obj2):            if obj1 is obj2 and id(obj1)==id(obj2):                return True            else:                return False    def boolOpe(self):            if not self.boolType:                return self.intType>10 and self.float>20.3            else:                return self.intType<10 or self.float<100.0                def buildInFunction(self):        rcmp=cmp(self.intType,10)        if rcmp>0:            print "The intType bigger than 10"        elif rcmp==0:            print "The intType bigger equal 10"        else:            print "The intType littler equal 10"                    rep=repr(self.dicType)        print rep                repT=`self.listType`        print repT                stri=str(self.dicType)        print stri                 if isinstance(self.dicType, DictType):            print self.dicType            def test():    ''' 创建一个测试函数,用来测试PythonObject类'''    pythonObj=PythonObject()    if pythonObj.boolType:        print "run test()"        pythonObj.buildInFunction()                                            if __name__=="__main__":    test()          

0 0
原创粉丝点击