第四章Python对象

本文深入探讨Python对象的三大特性:身份、类型与值,并详细解析各类标准类型与内置类型的特性和用途,帮助读者理解Python对象的工作原理。

所有Python对象都拥有三个特性:

  • 身份:每一个对象都有一个唯一的身份,可以通过内建函数id()得到。可以被认为是该对象的内存地址
  • 类型:对象的类型决定了该对象可以保存什么类型的值,可以进行什么样的操作,以及遵循什么样的规则。可以通过type()来查看Python对象的类型。type()返回的是个对 象而不是简单的字符串
  • 值:对象表示的数据项

上面三个特性在对象创建的时候就被赋值,但是除了值之外,其他两个特性都是只读的。(对于新式类型和类,对象的类型也是可以改变的)

对象的值是否可以更改被称为对象的可改变性(mutability)

某些Python对象有属性、值或相关联的可执行代码。Python用句点(.)标记法来访问属性。最常用的属性是函数和方法。

含有数据属性的对象包括(但不限于):类、类实例、模块、复数和文件

标准类型(也被称作“基本数据类型”:Python内建的基本数据类型):

  • Integer 整型
  • Boolean 布尔型
  • Long intege 长整型
  • Floating point real number 浮点型
  • Complex number 复数型
  • String 字符串
  • List 列表
  • Tuple 元组
  • Dictionary 字典

其他内建类型:

  • 类型
  • Null对象(None)
  • 文件
  • 集合/固定集合
  • 函数/方法
  • 模块

类型也是对象,类型对象的类型是‘type’(试试type()函数?)

Null对象只有一个值:None(不支持任何运算也没有任何内建方法,没有什么有用的属性,它的布尔值总是False)

所有标准对象都可以用于布尔测试,同类型的对象之间还可以比较大小。

以下对象的布尔值是False:

  • None;
  • False(布尔类型);
  • 所有值为0的数;
  • "":空字符串
  • []、()、{}:空列表、空元组、空字典

代码对象:
代码对象是便以过得Python源代码片段,是可执行对象。调用内建函数compile()可以得到代码对象。代码对象可以被exec命令或者eval()内建函数执行。代码对象本身不包含任何执行环境信息,是用户自定义函数的核心,在被执行时动态获得上下文。(事实上代码对象是函数的一个属性)一个函数除了代码对象属性以外,还有一些其他函数必须的属性,包括函数名、文档字符串、默认参数及全局命名空间等
帧对象:
帧对象表示Python的执行栈帧。帧对象包含Python解释器在运行时所需要知道的所有信息。
跟踪记录对象:
当异常发生时,一个包含针对异常的栈跟踪信息的跟踪记录对象被创建。如果一个异常有自己的处理程序,处理程序就可以访问这个跟踪记录对象。
切片对象:
当使用Python扩展切片语法时,就会创建切片对象。扩展的切片语法允许对不同的索引切片操作。包括步进切片、多维切片和省略切片。
省略对象:
省略对象用于扩展切片语法中,起记号作用。省略对象有一个唯一的名字Ellipsis,布尔值始终为True
XRange对象:

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

Python中多个比较操作可以在同一行进行,求值顺序为从左到右。(比较操作比较的是对象的数值而不是对象本身)

Python中对于对象本身得比较可以使用关键字isis not来判断两个对象是否指向同一个对象(是否是同一个对象的引用),返回True或者False来指示结果

Python会高效的缓存整型对象和字符串对象(因为它们是不可变对象),所以会造成没有创建新对象的假象。

bool类型中:not拥有最高优先级,只比比较操作符第一级,and和or操作符则相应的再低一级

type(object):接受一个对象,返回它的类型(返回值是一个类型对象,不限于标准对象,自建对象依旧可以)

cmp(obj1,obj2)比较obj1和obj2,前者大返回正整型,相等返回0,前者小返回负整型

str():以字符串的方式获取对象的内容、类型、数值属性等信息。得到的字符串可读性好(无法用eval()求值,对用户友好)

repr():以字符串的方式获取对象的内容、类型、数值属性等信息。得到的字符串通常可以用来重新获得该对象(通常情况下,obj == eval(repr(obj)),对Python友好)

 判断对象类型时除了用type返回类型之后在比较,可以通过内建函数isinstance(num,type)来直接返回num的类与type(我们给定的)是否相同。(这里描述暂时不太准确

[注]:Python2.2统一了类型和类,所有内建类型现在也都是类。

在这基础上,原来所谓内建转换函数像int()、type()、list()等都成了工厂函数,实质上它们是类。当调用它是,实际上是生成了该类型的一个实例,就像工厂生产货物一样

标准类型(全称):基本内建数据对象原始类型

  • “基本”:是指这些类型都是Python提供的标准或者核心类型
  • “内建”:是由于这些类型是Python默认就提供的
  • “数据”:是因为它们用于一般数据存储
  • “对象”:是因为对象是数据和功能的默认抽象
  • “原始”:是因为这些类型提供的是最底层的粒度数据存储
  • “类型”:是因为他们就是数据类型

存储模型:

以这种类型的对象能保存多少个对象为前提进行分类。

  • 能保存单个字面对像的类型,称为原子或标量存储。
  • 可容纳多个对象的类型,称之为容器存储(容器对象有时会在文档中被称为符合对象,不仅指类型,还包括类似类实例这样的对象),所有容器对象都能容纳不同类型的对象。、
存储模型
分类Python类型
标量/原子类型数值(所有数值类型),字符串(全部是文字)
容器类型列表、元组、字典


更新模型:
以这种对象创建成功后,它的值可以进行更新吗?为前提进行分类
更新模型
分类Python类型
可变类型列表、字典
不可变类型数字、字符串、元组

访问模型:

以三种访问方式分类:直接存取、顺序、映射

  • 非容器类型均可直接访问:所有数值类型
  • 序列类型指容器内元素按从0开始的索引顺序访问。
  • 映射类型指容器内元素无序存放,通过一个唯一的键来访问,容纳的是哈希键-值对的集合

访问类型
分类Python类型
直接访问数值
顺序访问字符串、列表、元组
映射访问字典

Python不支持的类型

  • char或byte:没有保存单一字符的类型,可以直接用长度为1的字符串类型来表示
  • 指针:Python替程序员管理指针,因此没必要访问指针(id()得到对象的身份号,这是最接近指针的地址,然而并没什么太大意义),可以理解为Python中一切都是指针(想想对象和对象的引用)
  • int vs short vs long:Python的普通类型相当于标准整型类型(实现了等同C语言的长整型),不需要担心什么,即使数值超出整型的表达范围,Python会自动返回一个长整型而不会报错。
  • float vs double:Python决定不支持单精度浮点类型,如果宁愿放弃更大取值范围而需要更高精度,Python还有一种十进制浮点类型Decimal(拥有任意精度),不过需要导入decimal模块才可以使用它。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值