速撸《python学习手册》--第9章-元组、文件及其他

元组

  • 任意对象的有序集合
  • 通过偏移存取
  • 属于不可变序列类型
  • 固定长度、异构、任意嵌套
  • 对象引用的数组

实际应用中的元组

  • 先转变为列表,然后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]]
    原文作者:DamaoShao
    原文地址: https://www.jianshu.com/p/fb11fa2fa938
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞