python核心编程第二版第四章学习笔记

来源:互联网 发布:mac机械硬盘开机速度 编辑:程序博客网 时间:2024/04/28 20:14
一.Python 对象
Python 使用对象模型来存储数据。构造任何类型的值都是一个对象。
所有的Python 对像都拥有三个特性:身份类型
身份:id号。也就是地址
二.对象属性
最常用的对象属性是函数和方法,不过有一些Python 类型也有数据属性。含有数据属性的对象包括(但不限于):类、类实例、模块、复数和文件。
标准类型
��数字(分为几个子类型,其中有三个是整型)
��整型
��布尔型
��长整型
��浮点型
��复数型
��字符串
��列表
��元组
��字典
四.其他内建类型
��类型
��Null 对象 (None)
��文件
��集合/固定集合
��函数/方法
��模块
��
1.类型对象和type 类型对象
通过调用type()函数你能够得到特定对象的类型信息:
>>> type(42)
<type 'int'>
<type 'int'>实际上是一个类型对象,碰巧它输出了一个字符串来告诉你它是个int 型对象。
类型对象的类型:
>>> type(type(42))
<type 'type'>
因此类型对象的类型为type型对象
2.None, Python 的 Null 对象
Python 有一个特殊的类型,被称作 Null 对象或者 NoneType,它只有一个值,那就是 None。它不支持任何运算也没有任何内建方法。
None 没有什么有用的属性,它的布尔值总是False。
核心笔记:布尔值
所有标准对象均可用于布尔测试,同类型的对象之间可以比较大小。每个对象天生具有布
尔 True 或 False 值。空对象、值为零的任何数字或者Null 对象 None 的布尔值都是False。
下列对象的布尔值是False。
��None
��False (布尔类型)
��所有的值为零的数:
��0 (整型)
��(浮点型)
��0L (长整型)
��0.0+0.0j (复数)
��"" (空字符串)
��[] (空列表)
��() (空元组)
��{} (空字典)
值不是上面列出来的任何值的对象的布尔值都是 True,例如non-empty、 non-zero 等等。
用户创建的类实例如果定义了nonzero(__nonzero__())或length(__len__())且值为0,那么它们的布尔值就是 False。
3.内部类型
��代码
��
��跟踪记录
��切片
��省略
��Xrange
1)代码对象
代码对象是编译过的Python 源代码片段,它是可执行对象。通过调用内建函数compile()可以得到代码对象。代码对象可以被 exec 命令或 eval()内建函数来执行。
(2)帧对象
帧对象表示 Python 的执行栈帧。帧对象包含Python 解释器在运行时所需要知道的所有信息。它的属性包括指向上一帧的链接,正在被执行的代码对象(参见上文),本地及全局名字空间字典以及当前指令等。每次函数调用产生一个新的帧,每一个帧对象都会相应创建一个C 栈帧。用到帧对象的一个地方是跟踪记录对象。
(3)跟踪记录 对象
当你的代码出错时, Python 就会引发一个异常。如果异常未被捕获和处理, 解释器就会退出脚本运行,显示类似下面的诊断信息:
Traceback (innermost last):
File "<stdin>", line N?, in ???
ErrorName: error reason
当异常发生时,一个包含针对异常的栈跟踪信息的跟踪记录对象被创建。如果一个异常有自己的处理程序,处理程序就可以访问这个跟踪记录对象。
(4)切片对象
当使用Python 扩展的切片语法时,就会创建切片对象。扩展的切片语法允许对不同的索引切片操作,包括步进切片, 多维切片,及省略切片。多维切片语法是 sequence[start1 : end1,start2 : end2], 或使用省略号, sequence[...,start1 : end1 ]. 切片对象也可以由内建函数 slice()来生成。步进切片允许利用第三个切片元素进行步进切片,它的语法为sequence[起始索引 : 结束索引 : 步进值]。
(5)省略对象
省略对象用于扩展切片语法中,起记号作用。 这个对象在切片语法中表示省略号。类似Null 对象 None, 省略对象有一个唯一的名字 Ellipsis, 它的布尔值始终为 True.
(6)XRange 对象
调用内建函数 xrange() 会生成一个Xrange 对象,xrange()是内建函数 range()的兄弟版本, 用于需要节省内存使用或 range()无法完成的超大数据集场合。

五.标准类型运算符
核心提示:实践
整数对象和字符串对象是不可变对象,所以Python 会很高效的缓存它们。这会造成我们认为Python 应该创建新对象时,它却没有创建新对象的假象。看下面的例子:
>>> a = 1
>>> id(a)
8402824
>>> b = 1
>>> id(b)
8402824
>>>
>>> c = 1.0
>>> id(c)
8651220
>>> d = 1.0
>>> id(d)
8651204
在上面的例子中,a 和 b 指向了相同的整数对象,但是 c 和 d 并没有指向相同的浮点数对象。如果我们是纯粹主义者,我们会希望 a 与 b 能和 c 与 d 一样,因为我们本意就是为了创建两个整数对象,而不是像 b = a 这样的结果。Python 仅缓存简单整数,因为它认为在Python 应用程序中这些小整数会经常被用到。
六.标准类型内建函数
标准类型内建函数
除了这些运算符, 我们刚才也看到, Python 提供了一些内建函数用于这些基本对象类型:
cmp(), repr(), str(), type(),和等同于repr()函数的单反引号(``)运算符。
举例:

>>> str([0, 5, 9, 9])
'[0, 5, 9, 9]'
>>>
>>> repr([0, 5, 9, 9])
'[0, 5, 9, 9]'
>>>
>>> `[0, 5, 9, 9]`
'[0, 5, 9, 9]'

str(),repr()和``运算在特性和功能方面都非常相似, 事实上 repr() 和 `` 做的是完全一样的事情,它们返回的是一个对象的“官方”字符串表示, 也就是说绝大多数情况下可以通过求值运算(使用eval()内建函数)重新得到该对象,但str()则有所不同。str() 致力于生成一个对象的可读性好的字符串表示,它的返回结果通常无法用于eval()求值, 但很适合用于 print 语句输出。需要再次提醒一下的是, 并不是所有repr()返回的字符串都能够用eval()内建函数得到原来的对象:
>>> eval(`type(type))`)
File "<stdin>", line 1
eval(`type(type))`)
^
SyntaxError: invalid syntax
核心笔记:为什么我们有了repr()还需要``?
在Python 学习过程中,你偶尔会遇到某个运算符和某个函数是做同样一件事情。之所以如此是因为某些场合函数会比运算符更适合使用。举个例子, 当处理类似函数这样的可执行对象或根据不同的数据项调用不同的函数处理时,函数就比运算符用起来方便。另一个例子就是双星号(**)乘方运算和pow()内建函数,x ** y 和 pow(x,y) 执行的都是x 的y 次方。
译者注:事实上Python 社区目前已经不鼓励继续使用``运算符。

减少函数调用的次数
要知道每次调用函数都会付出性能代价, 如果我们能减少函数的调用次数, 就会提高程序的性能。
六.标准类型的分类
1.存储类型
我们对类型进行分类的第一种方式, 就是看看这种类型的对象能保存多少个对象。Python的类型, 就象绝大多数其它语言一样,能容纳一个或多个值。一个能保存单个字面对象的类型我们称它为原子或标量存储,那些可容纳多个对象的类型,我们称之为容器存储。
以存储模型为标准的类型分类
存储模型
分类                Python 类型
标量/原子类型       数值(所有的数值类型),字符串(全部是文字)
容器类型            列表、元组、字典
2.更新类型
另一种对标准类型进行分类的方式就是, 针对每一个类型问一个问题:“对象创建成功之后,它的值可以进行更新吗?” 在前面我们介绍Python 数据类型时曾经提到,某些类型允许他们的值进行更新,而另一些则不允许。可变对象允许他们的值被更新,而不可变对象则不允许他们的值被更改。
以更新模型为标准的类型分类
更新模型
分类                   Python 类型
可变类型               列表, 字典
不可变类型             数字、字符串、元组
3.访问模型
根据访问我们存储的数据的方式对数据类型进行分类    。在访问模型中共有三种访问方式:直接存取,顺序,和映射。
以访问模型为标准的类型分类
访问模型
分类              Python 类型
直接访问          数字
顺序访问          字符串、列表、元组
映射访问          字典
总结
数据类型     存储模型    更新模型  访问模型l
数字           Scalar             不可更改   直接访问
字符串        Scalar             不可更改  顺序访问
列表           Container       可更改     顺序访问
元组           Container       不可更改   顺序访问
字典           Container       可更改     映射访问





原创粉丝点击