元组
- 任意对象的有序集合
- 通过偏移存取
- 属于不可变序列类型
- 固定长度、异构、任意嵌套
- 对象引用的数组
实际应用中的元组
- 先转变为列表,然后sort()
- 索引
- 分片
为什么有了列表还需要元组
元组的概念就来自数据库的一行。元组的角色类似于其他言语中的常数声明,带遍着一种完整性。
元组可以看作是一种简单的对象组合,列表则是随着时间改变的一种数据结构。
元组可以用在列表无法使用的地方,比如字典的key。
文件
文件对象只是常见文件处理任务输出的模块。
- 'r' 表示输入打开文件
- 'w' 表示输出生成并打开文件
- 'a' 表示在文件尾部追加内容而打开文件
- 'b'表示进行二进制数据处理
- '+'表示同时输入和输出打开文件
使用文件
- 最好的读取工具就是文件迭代器
- 内容是字符串,而不是对象
- 最好手动close文件,而不是等系统回收
- 文件时缓冲的并且是可查找的
实际应用中的文件
In [211]: S='Spam'
In [212]: S
Out[212]: 'Spam'
In [213]: X,Y,Z=43,44,45
In [214]: D={'a':1,'b':2}
In [215]: L=[1,2,3]
In [216]: F=open('datafile.txt','w')
In [217]: F.write(S+'\n')
Out[217]: 5
In [218]: F.write('%s,%s,%s\n'%(X,Y,Z))
Out[218]: 9
In [219]: F.write(str(L)+'$'+str(D)+'\n')
Out[219]: 27
In [220]: F.close()
In [221]: chars=open('datafile.txt').read()
In [222]: chars
Out[222]: "Spam\n43,44,45\n[1, 2, 3]${'a': 1, 'b': 2}\n"
In [223]: print(chars)
Spam
43,44,45
[1, 2, 3]${'a': 1, 'b': 2}
In [224]: F=open('datafile.txt')
In [225]: line=F.readline()
In [226]: line
Out[226]: 'Spam\n'
In [228]: line.rstrip()
Out[228]: 'Spam'
In [229]: line=F.readline()
In [230]: line
Out[230]: '43,44,45\n'
In [231]: parts=line.split(',')
In [232]: parts
Out[232]: ['43', '44', '45\n']
In [233]: int(parts[2])
Out[233]: 45
In [234]: numbers=[int(P) for P in parts]
In [235]: numbers
Out[235]: [43, 44, 45]
In [236]: line=F.readline()
In [237]: line
Out[237]: "[1, 2, 3]${'a': 1, 'b': 2}\n"
In [238]: parts=line.split('$')
In [239]: parts
Out[239]: ['[1, 2, 3]', "{'a': 1, 'b': 2}\n"]
In [240]: parts[0]
Out[240]: '[1, 2, 3]'
In [241]: eval(parts[0])
Out[241]: [1, 2, 3]
In [242]: objects=[eval(P) for P in parts]
In [243]: objects
Out[243]: [[1, 2, 3], {'a': 1, 'b': 2}]
使用pickle储存python原生对象
使用struct来存取二进制
文件的上下文管理器
即 with ... as
再看类型分类
- 对象根据分类来共享操作
- 只有可变对象(列表、字典和集合)可以原处修改
- 集合类似一个无值的字典的键。
对象灵活性
- 列表、字典和元组可以包含任何种类的对象。
- 列表、字典和元组可以任意嵌套。
- 列表和字典可以动态地扩大和缩小。
引用和拷贝
赋值操作总是储存对象的引用,而不是这些对象的拷贝。
浅拷贝:只复制了顶层
深拷贝:做了完整的复制
In [244]: import copy
In [245]: copy.deepcopy(S)
比较、相等性和真值
- “==” 操作符测试值的相等性
- “is” 表达式测试对象的一致性
python中不通类型的比较方法:
- 数字比大小
- 字符串是按照字典顺序,一个接着一个的比较
- 列表和元组从左到右对每部分的内容进行比较
- 字典通过排序之后的(键和值)列表进行比较(仅仅python2,python3不能比较)
- 元组和列表从左到右对每个部分进行比较
- python3中不允许数字混合类型比较
python中真和假的含义
- 数字非0都为真
- 对象非空都为真
None
None 是一个特殊对象,总是假,起到一个空的占位作用。
None不是未定义的意思,因为他有自己的一块内存。
bool类型
可以用bool()来测试一个对象的布尔值。
type对象
类型本身在python中也是对象类型。
可以使用isinstance()来测试类型。
内置类型的陷阱
赋值生成引用,而不是拷贝
重复能够增加层次深度
In [246]: l=[4,5,6]
In [247]: x=l*4
In [250]: y=[l]*4
In [251]: y
Out[251]: [[4, 5, 6], [4, 5, 6], [4, 5, 6], [4, 5, 6]]
In [252]: l[1]=[0]
In [253]: x
Out[253]: [4, 5, 6, 4, 5, 6, 4, 5, 6, 4, 5, 6]
In [254]: y
Out[254]: [[4, [0], 6], [4, [0], 6], [4, [0], 6], [4, [0], 6]]