元组
元组由简单的对象构成,与列表非常相似,但是元组是不能在原处修改的(它们是不可变的)。元组也不支持任何方法的调用,但是具有列表的大多数属性。
元组的主要特性:
- 任意对象的有序序列
- 通过偏移存取
- 属于不可变序列类型,与列表不一样,元组不支持原处修改
- 固定长度、异构、任意嵌套
- 对象引用的数组:与列表相似,元组看成是对象引用组成的数组。
元组基本操作
>>> (1,2,3,4)+(5,6,7,8)
(1, 2, 3, 4, 5, 6, 7, 8)
>>> (1,2,3,4)*4
(1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4)
>>> T = (1,2,3,4)+(5,6,7,8)
>>> T[1:4] #与列表相似,支持偏移量引用
(2, 3, 4)
>>> T[2]
3
>>> x=(40) #只是声明了一个整数
>>> x
40
>>> y=(40,) #这里加个逗号,就声明为元组
>>> y
(40,)
>>>
因为元组具有不可变性,在转化类型的过程中,都是使用内置方法,这些方法会返回一个新的对象,不会改变原来的元组对象。当然元组的不可变性只适用于对象的顶层而嵌套中的元素有可能是可变的,例如元组中的列表是可变的
>>> T=('a','b','z','c','d')
>>> sorted(T)
['a', 'b', 'c', 'd', 'z']
>>> list(T)
['a', 'b', 'z', 'c', 'd']
>>>
元组的不可变形性提供了编程过程中的某些完整性,可以确保元组在程序中不会被另一个引用修改。而列表就无法做到这一点了。
文件
Python内置open函数,会创建一个文件对象,可以作为计算机上的一个文件链接,在调用open之后,你可以通过调用返回文件对象的方法来读取相关文件信息。
在Python中,文件对象只是常见文件处理任务输出模块。
文件使用
- 文件迭代器是最好的读取文件行的工具
- 内容是字符串,不是对象。用迭代器返回的数据都是一个字符串。
- close是通常选项:调用文件close方法将会终止对外部文件的链接。Python是有自动回收内存空间的机制,但是这不是意味着不需要手动关闭文件。
- 文件是缓冲的并且是可查找的,文件的输出总是先缓冲的,这就意味着并不是实时进入硬盘中的文件的。需要使用flush函数把缓冲区的内容写入文件中。
- 由于从文件中读取内容都是字符串的类型,在正式使用之前,都要进行类型的转换。(eval函数可以将字符串当作可执行代码来执行)
- 一些文件可能是打包的二进制数据文件,用’wb’模式打开它,struct模块能够构造并解析打包的二进制数据。某种意义上来说,它还可以将字符串转换为二进制文件。
pickle存储Python的原生对象
eval函数可以将任何字符串当作python命令来执行,哪怕它有可能是删除文件的命令。当无法确认文件来源时,可以使用pickle来存储python原生对象:
>>> import pickle
>>> D={'a':1,'b':2,'c':3}
>>> F=open("datafile.pkl",'wb')
>>> pickle.dump(D,F)
>>> F.close()
>>> F1=open("datafile.pkl",'rb')
>>> D1=pickle.load(F1)
>>> D1 #可以直接从文件中读取python的原生对象
{'c': 3, 'b': 2, 'a': 1}
>>>
文件上下文管理器
可以用with…as…的语法来保证在执行完一个代码片段后,自动关闭文件。
也可以用try/finally 语句来达到相同的效果。
with open(r'c:\misc\data.txt') as myfile:
for line in myfile:
... use code here ... #with/as代码块执行完成之后,会自动关闭myfil文件
或者
myfile=open(r'c:\misc\data.txt')
try:
for line in myfile:
...use code here
finally:
myfile.close()
类型分类总结
总结一下Python核心类型使用时候的一些注意点:
- 对象根据分类来共享操作,比如如果都是序列一类,则都可以进行分配或索引之类的序列操作
- 可变对象可以在对象原处修改,而不可变对象则不行
- 在Python3.0中的bytearray字符串类型是可变的
- 集合类似于一个没有值只有键的字典,它们不能映射为某个值,并且像字典一样没有顺序。因此集合不是一个映射类型或者一个序列类型。