python学习手册笔记——09.元组、文件及其他

00.元组:元组由简单的对象组构成。元组与列表非常类似,只不过元组不能再原处修改(它们是不可变的),并且通过携程圆括号(而不是方括号)钟的一系列项。虽然元组不支持任何方法调用,但元组具有列表的大多数属性。

01.常见元组常量和运算
() 空元组
T =(0,) 单个元素的元组(非表达式)
T=(0, 'Ni', 1.2, 3) 四个元素的元组
T=0,'Ni', 1.2, 3 另一个四元素的元组(与前列相同)
T=('abc', ('def', 'ghi')) 嵌套元素
T = tuple('spam') 一个可迭代对象的项的元组
T[i] 索引、索引的索引、分片、长度
T[i][j]
T[i:j]
len(T)
T1+T2 合并、重复
T * 3
for x in T: print(x) 迭代、成员关系
‘spam’ in T

02.有些人会告诉你,元组钟一定要使用圆括号,而有些人会钙塑你不要用(其他人都有自己的生活,并不会告诉你该怎样对待元组)。仅当元组作为常量传给函数调用(圆括号很重要)。对出血者而言,最好的建议是一致使用圆括号,者可能会比弄明白什么时候省略圆括号更简单一些。许多程序猿也发现圆括号有助于增加脚本的可读性,因为这样可以使元组更加明确,尽管你的使用经验可能会有所不同。

03.列表解析(List comprehension)也可用于元组的转换。列表解析式名副其实的序列操作——它们总会创建的列表,但也可以用于遍历包括元组、字符串以及其他列表在内的任何序列对象。列表解析甚至可以用在某些并非实际储存的序列之上——任何可遍历的对象都可以,包括可自动逐行读取的文件。

04.注意元组的不可变形只适用于元组本身顶层而并非其内容。

05.元组


06.文件对象多少有些不寻常。它们不是数字、序列也不是对应。相反,文件对象只是常见文件处理任务输出模块。多数文件方法都与执行外部文件相关的文件对象的输入和输出有关,但其他文件方法可查找文件的新位置、刷新输出缓存。

07.文件运算
output = open(r'C:\spam', 'w') 创建输出文件('w'是指写入)
input = open('data', 'r') 创建输入文件('r'是指读写)
input = open('data') 与上一行相同('r'是默认值)
aString = input.read() 把整个文件读仅单一字符串
aString = input.read(N) 读取下一行(包含行末标识符)到一个字符串
aString = input.readline() 读取一行(包括行末标识符)到一个字符串
aList = input.readlines() 读取整个文件到字符串列表
output.write(aString) 写入字节字符串到列表
output.writeline(aList) 把列表内u松油字符串写入文件
output.close() 手动关闭(当文件收集完成时会体你关闭文件)
output.flush() 把输出缓冲区刷到硬盘钟,但不关闭文件
anyFile.seek(N) 修改文件位置到偏移量N处以便进行下一个操作
for line in open('data'): use line 文件迭代器一行一行地读取
open('f.txt', encoding='latin-1') Python3.0 Unicode文件文件(str字符串)
open('f.bin', 'rb') Python3.0二进制byte文件(bytes字符串)

08.打开文件
为打开一个文件,程序会调用内置open函数,首先时外部名,接着处理模式。模式典型地用字符串'r'代表输入打开文件,'w'代表为输出生成并打开文件,'a'代表为在文件尾部追加内容而打开文件。
*在模式字符串尾部加上b可以进行二进制数据处理
*加上'+'意味着同时为输入和输出打开文件。

09.Python总是支持文本和二进制文件,二者之间由明显的区别:
*文件文件把内容标识为常规的str字符串,自动执行Unicode编码和解码,并且默认执行末行转换。二进制文件把内容表示为一个特殊的bytes字符串类型,并且允许程序部修改地访问文件内容。

10.rstrip:去掉多余的行终止符。

11.eval这一内置函数,eval能够把字符串当作可执行程序代码(从技术上来讲,就是一个含有python表达式字符串)

12.pickle模块是能够让我们直接在文件中存储几乎任何python对象的高级工具,也并不要求我们把字符串转来转去。

13.struct模块能够构造并解析打包的二进制数据。从某种意义上说,它是另一个数据转换工具,它能够把文件中字符串解读为二进制数据。

14.文件上下文管理器

15.seek函数能够复位你在文件中的当前位置(下次读写讲应用在该位置上),flush能够强制性地讲缓存输出写入磁盘(文件总会默认进行缓存)等。

16.流向方面:
标准流
os模块中的描述文件
sockets\pipes和FIFO文件
通过键来直接存储的不变的Python对象
shell命令流

17.记住一些要点:
*对象根据分类来共享操作
*只有可变对象(列表、字典和集合)可以原处修改;我们不能原处修改数字、字符串或元组
*文件导出唯一的方法,因此可变形并不真的适用于他们——当处理文件的时候,它们的状态可能会修改
*数字包含了所有数字类型:整数、浮点数、附属、小数和分数
*集合类似于一个无值的字典的键,它们不能映射为值,并且没有顺序;因此,集合不是一个映射类型或者一个序列类型,frozenset是集合的一个不可变的版本。

18.引用VS拷贝:赋值操作总是储存对象的引用,而不是这些对象的拷贝。因为赋值操作会产生相同对象的多个引用,需要意识到在原处修改可变对象时可能会影响程序中其他地方对相同对象的其他引用。

19.共享对象引用:因为变量X引用的列表也在被L和D引用的对象内引用,修改X的共享列表与L和D的看起来也有所不同。


20.拷贝
a.没有限制条件的分片表达式(L[:])能够复制序列
b.字典copy方法(X.copy())能够复制字典
c.有些内置函数能够生成拷贝(list(L))
d.copy标准模块能够生成完整拷贝

21.比较、相等性和真值
两种方法可以测试相等性:
a.“==”操作符测试值的相等性。Python运行相等测试,递归地比较所有内嵌对象
b.“is”表达式测试对象的一致性。Python测试二者是否时同一个对象

22.不同的类型的比较方法:
*数字通过相对大小进行比较
*字符串是按照字典顺序,一个字符接一个字符地对比进行比较("abc" < "ac")
*列表和元组从左到右对每部分的内容进行比较。
*字典通过排序之后(键、值)列表进行比较。

23.Python中真的假的含义:
*数字如果非零,则为真
*其他对象如果非空,则为真

24.Python还有一个特殊对象:None,总被认为是假。这是Python中有一种特殊数据类型的唯一值,一般都起到一个空的占位作用。

25. None是某些内容,而不是没有内容——它是一个真正的对象,并且有一块内存,由Ptyhon给定一个内置的名称。

26.由于这个新的类型的运行方式,这的确只是先前所说的真、假概念的较小扩展而已,这样的设计就是为了让真值更为明确。

27.按类别组织的Python的主要内置对象类型。Python中所有一切都是某种类型的对象,即便是某个对象的类型!任何对象的类型都是类型为"type"的对象。

 

 


28.赋值生成引用,而不是拷贝。解决这一问题的方法与前面所讲过的一样,因为这的确是以另一种生成共享可变对象引用的方法。

29.除非你真的需要,否则不要使用循环引用。虽然由很多创建循环的不错的理由,但除非你知道代码会如何处理,否则你可能不想让对象在实际中频繁地引用自身。

30.不可变类型不可以在原处改变。你不能在实地改变不可变对象。如果需要的话,你的通过分片、合并等操作来创建一个新的对象,再向后复制给原引用。

posted @ 2019-07-18 08:37  艾小小雨  阅读(161)  评论(0编辑  收藏  举报