python笔记 4.python对象

4.1 python对象

Python 使用对象模型来存储数据。
构造任何类型的值都是一个对象。

4.1.1 对象特性

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

  • 身份:

每一个对象都有一个唯一的身份标识自己,任何对象的身份可以使用内建函数 id()来得到。这个值可以被认为是该对象的内存地址。

  • 类型

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

对象表示的数据项

上面三个特性在对象创建的时候就被赋值,除了值之外,其它两个特性都是只读的。对于新风格的类型和类,对象的类型也是可以改变的,不过对于初学者并不推荐这样做。

如果对象支持更新操作,那么它的值就可以改变,否则它的值也是只读的。对象的值是否
可以更改被称为对象的可改变性(mutability)

4.1.2 对象属性

某些 Python 对象有属性、值或相关联的可执行代码,比如方法(method)。

Python 用点(.)标记法来访问属性。

最常用的属性是函数和方法

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

4.2 标准类型

又称为基本数据类型

  • 数字(分为几个子类型,其中有三个是整型)
  • 整型
  • 布尔型
  • 长整型
  • 浮点型
  • 复数型
  • 字符串
  • 列表
  • 元组
  • 字典

4.3 其他内建类型

  • 类型

通过调用 type()内建函数你能够得到特对象类型信息

所有类型对象的类型都是 type,它也是所有 Python 类型的根和所有 Python 标准类
的默认元类(metaclass)。

类就是类型,实例是对应类型的对象。

  • Null对象(None)

Python 有一个特殊的类型,被称作 Null 对象或者 NoneType,它只有一个值,那就是 None。

Null 对象不支持任何运算也没有任何内建方法。

Null 对象的布尔值总是 False。

  • 文件
  • 集合、固定集合
  • 函数、方法
  • 模块

4.4 内部类型

  • 代码对象

代码对象是编译过的Python源代码片段,它是可执行对象。通过调用内建函数 compile()可以得到代码对象。代码对象可以被 exec 命令或 eval()内建函数来执行。

代码对象本身不包含任何执行环境信息,它是用户自定义函数的核心, 在被执行时动态获得上下文。

(事实上代码对象是函数的一个属性)一个函数除了有代码对象属性以外,还有一些其它函数必须的属性,包括函数名,文档字符串,默认参数,及全局命名空间等等。

  • 帧对象

帧对象表示 Python的执行栈帧。帧对象包含Python解释器在运行时所需要知道的所有信息。它的属性包括指向上一帧的链接,正在被执行的代码对象(参见上文),本地及全局名字空间字典以及当前指令等。

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

  • 跟踪记录对象

当你的代码出错时,Python就会引发一个异常。如果异常未被捕获和处理, 解释器就会退出脚本运行,显示类似下面的诊断信息:

Traceback (innermost last):
File “”, line N?, in ???
ErrorName: error reason

当异常发生时,一个包含针对异常的栈跟踪信息的跟踪记录对象被创建。如果一个异常有
自己的处理程序,处理程序就可以访问这个跟踪记录对象。

  • 切片对象

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

扩展的切片语法允许对不同的索引切片操作,包括步进切片, 多维切片,及省略切片。
多维切片语法是 sequence[start1 : end1,start2 : end2], 或使用省略号, sequence[…,start1 : end1 ].

切片对象也可以由内建函数slice()来生成。

步进切片允许利用第三个切片元素进行步进切片,它的语法为
sequence[起始索引 : 结束索引 : 步进值]。

>>> foostr = ‘abcde’

>>> foostr[::-1]

‘edcba’

>>> foostr[::-2]

‘eca’

  • 省略对象

省略对象用于扩展切片语法中,起记号作用。 这个对象在切片语法中表示省略号。

类似Null 对象 None, 省略对象有一个唯一的名字 Ellipsis, 它的布尔值始终为 True.

  • XRange对象

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

4.5 标准类型运算符

4.5.1 对象值的比较

比较运算符(<、>、==)用来判断同类型对象的大小相等关系,所有的内建类型均支持比较运算,比较运算返回布尔值 True 或 False。

4.5.2 对象身份的比较

Python 支持对象本身的比较。对象可以被赋值到另一个变量(通
过引用)。因为每个变量都指向同一个(共享的)数据对象,只要任何一个引用发生改变,该对象的其它引用也会随之改变。

>>> a = b = 4.3

>>> a is b

True

>>> a = 4.3

>>> b = 2 + 2.3

>>> a is b

False

整数对象和字符串对象是不可变对象,所以Python会很高效的缓存它们(一定范围)。
这会造成我们认为Python应该创建新对象时,它却没有创建新对象的假象。

>>> a = 1

>>> b = 1

>>> a is b

True

4.5.3 布尔类型

not, and, or 可以加入任意比较表达式

python支持结链比较:将多个比较操作在一个表达式中进行

4.6 标准类型内建函数

4.6.1 大小比较 cmp(obj1, obj2)

内建函数 cmp()用于比较两个对象 obj1 和 obj2, 如果 obj1 小于 obj2, 则返回一个负整
数,如果 obj1 大于 obj2 则返回一个正整数, 如果 obj1 等于 obj2, 则返回 0。

它的行为非常类似于C语言的strcmp()函数。比较是在对象之间进行的,不管是标准类型对象还是用户自定义对象。如果是用户自定义对象,cmp()会调用该类的特殊方法__cmp__()。

4.6.2 对象的字符串表示 repr(obj)

repr()函数得到的字符串通常可以用来重新获得该对象, 通常情况下 obj == eval(repr(obj)) 这个等式是成立的。并不是所有repr()返回的字符串都能够用eval()内建函数得到原来的对象,如type对象。

4.6.3 可读性好的字符串表示 str(obj)

4.6.4 type(obj) 返回类型对象

>>> type(type(4))

< type ‘type’>

查看对象类型: isintance()

样例:

if type(num) == type(0)

减少函数调用次数:
if type(num) == types.IntType

对象值比较 -> 对象身份比较
同一运行期间,某一范围内的整数都是同一个对象
if type(Num) is types.IntType

减少查询次数
from types import IntType

4.6.5

python operator模块

4.7 类型工厂函数

  • int(), float(), complex(), bool()
  • str(), unicode(), basestring()
  • list(), tuple(), dict(), set(), frozenset()
  • type()
  • object(), classmethod(), statictmethod()
  • super()
  • property()
  • file()

4.8 标准类型的分类

4.8.1 存储模型

  • 标量/原子类型

只能保存单个字面对象:数值,字符串

  • 容器类型/复合对象

所有的python容器对象都能够容纳不同类型的对象:
列表,元组,字典,集合

更新模型

对象成功之后是否允许更新对象的值,或者说改变对象的值之后新的对象会被创建

  • 可变类型

列表,字典

  • 不可变类型

数字,字符串,元组

访问模型

  • 直接存取:数值
  • 顺序存取:字符串,列表,元组(集合不属于)
  • 映射存取:字典

4.9 不支持的类型

  • char,byte:单字符串
  • 指针:id()
  • int, short, long: int
  • float, double: float, Decimal
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值