• 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()无法完成的超大数据集合场合。

        学习更新中....

     

  • 相关阅读:
    Solution -「洛谷 P5659」「CSP-S 2019」树上的数
    前端随心记---------接私活必备的 10 个开源项目!
    前端随心记---------Vue3.0马上就要来了,TypeScript学会了没?
    前端随心记---------vue3.0终于来了,作者已公布源码
    前端随心记---------vuex
    前端随心记---------为什么要使用Nodejs
    前端随心记---------Javascript系列(第三节.函数的变量提升)
    前端随心记---------Javascript系列(第二节----函数.事件处理程序)
    前端随心记---------Javascript系列(判断一个数是否为素数的三种解法)
    前端随心记---------Javascript系列(第一节)
  • 原文地址:https://www.cnblogs.com/Jiaoxia/p/3915052.html
Copyright © 2020-2023  润新知