15、python学习手册之:元组、文件及其他
1、使用文本来存储python对象时,必须使用转换工具把对象转成字符串
2、内置函数eval可以把字符串当做可执行程序代码:eg s = ‘[1,2,3]’ eval(s) -->[1,2,3],这里eval及时把字符串转化为列表对象
3、pickle模块能够直接存储对象
D= {‘a’:1,‘b’:2}
F= open('datafile.pkl','wb')
pickle.dump(D,F)
F.close()
F = open('datafile.pkl','rb')
E = pickle.load(F)
E --> {‘a’:1,‘b’:2}
4、struct模块能够构造并解析打包的二进制数据。从某种意义上说,它是另一个数据转换工具,它能够把文件中的字符串解读为二进制数据
data = struct.pack('>i4sh',7,'spam',9) -->b'\x00\x00\x00\x07spam\0x00\x08'
data = b'\x00\x00\x00\x07spam\0x00\x08' value = struct.unpack('>i4sh',data) ---> (7,'spam',8)
5、文件上下文管理器支持自动异常处理,已确保在退出后可以自动关闭文件
with open(r") as myfile:
for line in myfile:
......
其他部分:
1、对象根据分类来共享操作;例如,字符串、列表和元组都共享诸如合并、长度和索引等序列操作
2、只有可变对象(列表、字典和集合)可以原处修改,我们不能原处修改数字、字符串或元组。
3、文件导出唯一的方法,因此可变性并不真的适用于他们----当处理文件的时候,它们的状态可能会修改,但是,这与python的核心类型可变性限制不完全相同
4、集合类似于一个无值的字典
5、赋值操作总是存储对象的引用,而不是这些对象的拷贝。不过,因为赋值操作会产生相同对象的多个引用,需要意识到在原处修改可变对象时可能会影响程序中其他地方对相同对象的其他引用,因此就需要明确地告诉python复制该对象
可以拷贝的情况:
没有限制条件的分片表达式(L[:])能够复制序列
字典copy方法(x.copy())能够复制字典
有些内置函数(例如:list)能够生成拷贝(list(L))
copy标准库模块能够生成完整拷贝
注意:无条件值的分片已经字典copy方法只能做顶层复制。也就是说,不能够复制嵌套的数据结构。如果你需要一个深层嵌套的数据结构的完整的、完全独立的拷贝,那么就要使用标准的copy模块———包括import copy语句,并编辑X = copy.deepcopy(Y)对任意嵌套对象Y做完整的复制。这一调用语句能够递归地遍历对象来复制它们所有的组成部分
6、重复能够增加层次深度
序列重复就好像是多次将一个序列加到自己身上。这是事实,但是当可变序列被嵌套时效果就不见得总翔你想的那样;eg
L= [4,5,6] X= L*4 Y=[L]*4
X=[4,5,6,4,5,6,4,5,6,4,5,6]
Y=[[4,5,6],[4,5,6],[4,5,6],[4,5,6]]
由于L在第二次重复中是嵌套的,Y结束嵌套的引用,返回赋值为L的原始列表
L[1]=0
X=[4,5,6,4,5,6,4,5,6,4,5,6]
Y=[[4,0,6],[4,0,6],[4,0,6],[4,0,6]]