美文网首页python学习笔记
速撸《python学习手册》--第9章-元组、文件及其他

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

作者: DamaoShao | 来源:发表于2018-08-15 20:39 被阅读0次

    元组

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

    实际应用中的元组

    • 先转变为列表,然后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]]
    

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/gghgbftx.html