Python学习笔记

Python对象

  Python使用对象模型来存储数据。构造任何类型的值都是一个对象。尽管Python通常被当成一种“面向对象的编程语言”,但完全可以不使用类和实例写出实用的脚本。不过,Python的对象语法和架构鼓励我们使用这些特性,下面我们仔细研究一下Python对象。

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

  身份:每一个对象都有一个唯一的身份标示自己,任何对象的身份都可以使用内建函数id()来得到。这个值可以认为是该对象的内存地址。一般极少会使用这个值,因此也不用关心它到底是什么。

  类型:对象的类型决定了该对象可以保存什么类型的值,可以进行什么样的操作,以及遵循什么样的规则。可以用内建函数type()查看Python对象的类型。因为在Python中类型也是对象,所以type()返回的的是对象而不是简单的字符串。

  值:对象表示的数据项。

  上面三个特性在对象创建时被赋值,除了值之外,其他的两个特性嗾使只读的。对于新式类型和类,对象的类型也是可以改变的,但是不推荐这样做。

  如果对象支持更新操作,那么它的值就是可以改变,否则他的值也是只读的。对象的值是否能够更改被称作对象的可更改性(有时间再写这个)。只要一个对象还没有被销毁,这些特性就一直存在。

  Python有一系列的内建数据类型,必要时也可以创建自定义的类型来满足自己的需要。大多数通常使用标准类型,对特定的数据存储则通过创建和实例化类来实现。另外,某些Python对象有属性,值或相关联的可执行代码,比如方法。Python用句点标记法来访问属性。属性包括相应对象的名字等。最常用的属性是函数和方法,不过有一些Python类型也有数据属性。含有数据属性的对象包括:类、类实例、模块、复数和文件。

  标准类型:整型、布尔型、长整型、浮点型、复数型、字符串、列表、元组、字典

  其他内建类型:类型、Null对象(None)、文件、集合、函数、模块、类

  内部类型:代码、帧、跟踪记录、切片、省略、Xrange

  这里我们讨论Type和None两种类型的使用,介绍一下内部类型,其他的有时间再写。

  Type类型对象:

    虽然看上去把类型本身也当成对象有点特别,还是要在这里说一下,对象的一系列固有的行为和特性(比如支持哪些运算,具有哪些方法)必须事先定义好。从这个角度看,类型正是保存这些信息的最佳位置。描述一个类型所需要的信息不可能用一个字符串来搞定,所以类型不能是一个简单的字符串,这些信息不能也不应该和数据保存在一起,所以我们将类型定义成对象。

    下面正式介绍内建函数type()。通过调用type函数能够得到特定对象的类型信息。

    print(type(42))

    <class 'int'>

    仔细看一看上述的type函数的返回值,我们得到一个简单的输出结果<class 'int'>。这里应当意识到它并不是一个简单的告诉你42是个int型的字符串。看到<class 'int'>实际上是一个类型对象,碰巧它输出了一个字符串来告诉你它是一个int型对象。

    那么,类型对象的类型是什么?实验实验一下:

    print(type(type(42)))

    <class 'type'>

    没错,所有类型对象的类型都是‘type',它也是所有Python类型的根和Python标准类的默认元类。

    总之一句话,类就是类型,实例是对应类型的对象。

  Python中的Null对象-None

    Python有一个特殊的类型,被称为Null对象或者NoneType,它只有一个值,那就是None。它不支持任何运算也没有任何内建方法。None类型最接近C语言的void,None类型的值和C语言的Null值非常相似,None没有什么有用的属性,它的布尔值总是False(所有标准对象均可用于布尔测试,同类型的对象之间可以比较大小。每个对象天生具有布尔值,空对象,值为0的数字对象或者None对象的布尔值都是False)

  内部类型,一般程序员不会和这些对象打交道,这里简单介绍:

    代码对象:代码对象是编译过的Python源代码片段,它是可执行对象。通过调用内建函数compile()可以得到代码对象。代码对象可以被exec命令或者eval()内建函数来执行。代码对象本身不包括任何执行环境信息,它是用户自定义函数的核心,在被执行时动态获得上下文(事实上,代码对象是函数的一个属性),一个函数除了有代码对象属性以外,还有一些其他函数必须的属性,包括函数名、文档字符串、默认参数、及全局命名空间。

    帧对象:帧对象表示Python的执行栈帧。帧对象包含Python解释器在运行时所需要知道的所有信息。它的属性包括指向上一帧的链接,正在被执行的代码对象,本地及全局名称空间字典及当前指令等。每次函数调用产生一个新的帧,每一个帧对象都会相应的创建一个C栈帧。用到帧对象的一个地方是跟踪记录对象。

    跟踪记录对象:当代码出错时,Python会引发一个异常。如果异常未被捕获和处理,解释器就会退出运行,显示一个诊断信息。当异常发生时,一个包含针对异常的栈跟踪信息的跟踪记录对象被创建。如果一个异常有自己的处理程序,处理程序就可以访问这个跟踪记录对象。

    切片对象:当使用Python扩展的切片语法时,就会创建切片对象。扩展的切片语法允许对不同的索引切片操作,包括步进切片、多维切片和省略切片。多维切片的语法是sequence[starts1:end1,start2:end2],或使用省略号,sequence[...,start1:end1]。切片对象也可以由内建函数slice()来生成。步进切片允许利用第3个切片元素进行步进切片,它的语法为sequence[起始索引:结束索引:步进值]。下面是几个步进切片的例子:    

      foostr = 'abcde'
      print(foostr[::-1])
      print(foostr[::-2])
      foolist = [123,'xba',342.23,'abc']
      print(foolist[::-1])

      结果:    

        edcba
        eca
        ['abc', 342.23, 'xba', 123]

    省略对象:

      省略对象用于扩展切片语法中,起记号作用。这个对象在切片语法中表示省略号。类似于Null对象None,省略对象有一个唯一的名字Ellipsis,它的布尔值始终是True。

    XRange对象

      调用内建函数xrange()会生成一个XRange()对象,xrange()是内建函数range()的兄弟版本,用于需要节省内存使用或range()无法完成的超大数据集合场合。

    学习更新中....

 

原文地址:https://www.cnblogs.com/Jiaoxia/p/3915052.html