python 对象

2018-09-29 13:56:42   最后更新: 2018-09-29 13:56:42   访问数量:156




上一篇日志中,我们讲解了 python 的垃圾回收机制

我们也提到了 python 对象的一些源码构成

python 的内存管理与垃圾收集

 

所有的 python 对象都有三个特性组成:

  1. id -- 使用内建函数 id() 可以获取,被认为是该对象的内存地址,通常并不被程序使用
  2. 类型 -- 型决定了该对象可以保存什么类型的值,可以进行什么样的操作,以及遵循什么规则,通过用内建函数 type() 可以查看对象的类型信息
  3. 值 -- 对象表示的数据项

id 和类型信息是只读的,对象的值是否可变称为对象的可改变性

 

python 对象拥有以下标准类型:

  1. 整型
  2. 布尔型
  3. 浮点型
  4. 复数型
  5. 字符串
  6. 列表 -- []
  7. 元组 -- ()
  8. 字典 -- {}

 

  1. type
  2. class
  3. none
  4. file
  5. 集合/固定集合
  6. 函数/方法
  7. 模块

 

内部类型是在一般情况下程序员不需要关心的类型

  1. 代码
  2. 跟踪记录
  3. 切片
  4. 省略
  5. Xrange

 

代码对象

代码对象是编译过的 Python 源代码片段,它是可执行对象

通过调用内建函数 compile() 可以得到代码对象

代码对象可以被 exec 命令或 eval()内建函数来执行,博主后续会更新专门的一篇博客来说明 exec 与 eval 的区别和用法

代码对象在执行时动态获取执行环境上下文

一个用户自定义函数除了包含代码对象,还包含以下信息:

  1. 函数名
  2. 文档字符串
  3. 默认参数
  4. 全局命名空间

 

帧对象

帧对象就是 Python 的执行栈帧

帧对象包含 Python 解释器在运行时所需要知道的所有信息:

  1. 指向上一帧的链接
  2. 正在被执行的代码对象
  3. 本地及全局名字空间字典
  4. 当前指令

 

每次函数调用产生一个新的帧,每一个帧对象都会相应创建一个 C 栈帧

跟踪记录对象就是应用帧对象实现的

 

跟踪记录(Traceback)对象

当代码出错时, Python 就会引发一个异常

如果异常未被捕获和处理, 解释器就会退出脚本运行,显示类似下面的诊断信息:

Traceback (innermost last): File "<stdin>", line N, in ... ErrorName: error reason

 

当异常发生时,一个包含针对异常的栈跟踪信息的跟踪记录对象被创建

如果一个异常有自己的处理程序,处理程序就可以访问这个跟踪记录对象

 

切片对象

当使用 Python 扩展的切片语法时,就会创建切片对象

切片语法允许对不同的索引切片操作,包括:

  1. 步进切片 -- sequence[起始索引 : 结束索引 : 步进值]
  2. 多维切片 -- sequence[start1 : end1, start2 : end2]
  3. 省略切片 -- sequence[...,start1 : end1]

也可以使用内建函数 slice() 来生成

 

具体的切片语法我们会在后面的博客中更新,这里给出一个示例:

>>> foostr = 'abcde' >>> foostr[::-1] 'edcba' >>> foostr[::-2] 'eca' >>> foolist = [123, 'xba', 342.23, 'abc'] >>> foolist[::-1] ['abc', 342.23, 'xba', 123]

 

 

省略对象 -- Ellipsis

上面提到的切片语法中的 ... 就是省略对象,他有唯一的名字:Ellipsis,布尔值始终是 True

这个对象在切片语法中表示省略号,类似 Null 对象 None

 

XRange 对象(python3 已废弃)

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

xrange() 函数用法与 range 完全相同,所不同的是生成的不是一个数组,而是一个生成器,这个生成器就是 Xrange 对象

由于 python3 对 range 性能的优化,在 python3 中废弃了 xrange 方法,统一使用 range 方法

 

python 的所有类型都可以转换成布尔型,下列对象的布尔值是 false,其他则是 true

  1. None
  2. False
  3. 所有为 0 的数值类型(整型、浮点型、复数型)
  4. 空字符串
  5. 空列表
  6. 空元组
  7. 空字典
  8. 定义了 nonzero(__nonzero__()) 或 length(__len__()) 且值为 0 的用户类型

 






技术帖      龙潭书斋      python      对象      object      类型     


京ICP备15018585号