zoukankan      html  css  js  c++  java
  • Day03:集合、文件处理和函数基础

    上节课复习:
        1.总结
            可变/不可变:
                可变类型:list,dict
                不可变类型:int,float,str,tuple
             存值的个数:
                 存一个值:int,float,str
                 存多个值:list,dict,tuple
             访问方式:
                 只能通过变量名直接访问:int,float
                 可以通过索引访问(有序/序列):str,list,tuple
                 可以通过key访问:dict
                
              for:重复取值
              while:重复做事
       
        2.字符编码
            内存中统一使用unicode,特点是:
                1.兼容万国字符
                2.与其他国家编码都有对应关系
             保证不乱码的关键:
                1.采用的字符编码表能够兼容你要存放的字符
                2.字符用什么编码标准存放的,就该用什么编码标准取解码
          python2:ASCII
          python3:utf-8
          在文件头:
              #coding:gbk
          python3: str类型是unicode编码的
          python2: str类型是unicode.encode('文件头指定的编码')之后的结果
                  x=u'你':存成unicode
         

    今日内容:
        1.集合
        2.文件处理
        3.函数
            1.什么是函数
            2.为何用函数
            3.函数的分类,如何用函数
            4.定义函数
            5.调用函数
            6.形参与实参的详细作用(!!)
            7.函数对象
            8.函数嵌套
            9.名称空间与作用域(!!)

    一.集合

        类型:
        作用:
        1.去重
        2.关系运算(集合设计之初用于关注群体间的关系,而非个体)
        定义:逗号分隔开多个元素
        注意:
        1.每一个元素都必须是不可变类型
        2.集合内的元素不能重复
        3.集合内元素无序,不支持索引
       
        优先掌握:
        1.集合的定义及注意点
        2.集合的关系运算
        3.len, in, not ,in
        4.for循环遍历集合
        需要掌握:
        1.集合的去重以及局限性
        2.往集合内添加或删除元素,add,update,pop,remove,discard

    1 pythoners=['tom','alex','andy','rocky','lily']
    2 linuxers=['walter','tao','karen','andy','alex']
    3 l=[]
    4 for item in pythoners:
    5     if item in linuxers:
    6         l.append(item)
    7 print (l) 

    输出: # ['alex', 'andy']

    1 #去重
    2 #局限性:
    3 #1.不能保证原来的顺序
    4 #2.不能针对可变类型去重
    5 l=[1,1,1,1,'andy','tom']
    6 s=set(l)
    7 print(s)
    8 l=list(s)
    9 print(l)

    输出:

    {1, 'andy', 'tom'}
    [1, 'andy', 'tom']

    1 l=[1,1,1,1,'andy','tom']
    2 for item in s:
    3     print(item)

    输出:

    1
    andy
    tom

     1 #需求:
     2 #1.列表内的元素有可变类型
     3 #2.去重之后要保证原来的顺序
     4 info=[
     5     {'name':'andy','age':'18'},
     6     {'name':'tom','age':'23'},
     7     {'name':'alex','age':'36'},
     8     {'name':'andy','age':'18'},
     9     {'name':'andy','age':'20'}
    10 ]
    11 l=[]
    12 for dic in info:
    13     if dic not in l:
    14         l.append(dic)
    15 info=l
    16 print(info)

    输出:

    [{'name': 'andy', 'age': '18'}, {'name': 'tom', 'age': '23'}, {'name': 'alex', 'age': '36'}, {'name': 'andy', 'age': '20'}]

     1 #关系运算
     2 pythoners={'tom','alex','andy','rocky','lily'}
     3 linuxers={'walter','tao','karen','andy','alex'}
     4 
     5 #1.求既报名linux又报名oython的学员名单
     6 print(pythoners&linuxers)
     7 #2.只报名python, 没有报名linux的学员名单,即集合pythoners-linuxers,差集
     8 print(pythoners-linuxers)
     9 #3.只报名linux, 没有报名python的学员名单,即集合linuxers-pythoners,差集
    10 print(linuxers-pythoners)
    11 print(linuxers.difference(pythoners))
    12 #4.求所有报名学员名单,求并集
    13 print(pythoners|linuxers)
    14 print(pythoners.union(linuxers))
    15 #5.求没有同时报名两门课程的学院奖名单,对称差集
    16 print(pythoners^linuxers)

    输出:

    {'andy', 'alex'}
    {'rocky', 'lily', 'tom'}
    {'karen', 'walter', 'tao'}
    {'karen', 'walter', 'tao'}
    {'tao', 'rocky', 'lily', 'tom', 'karen', 'andy', 'walter', 'alex'}
    {'tao', 'rocky', 'lily', 'tom', 'karen', 'andy', 'walter', 'alex'}
    {'karen', 'tao', 'walter', 'rocky', 'lily', 'tom'}

     1 #集合的其他方法:
     2 s1={1,2,3,4,5,}
     3 s1.add(6)
     4 print(s1)
     5 s2={3,4}
     6 s1.difference(s2)
     7 #差集取到后更新s1的值
     8 s1.difference_update(s2)
     9 print (s1)
    10 #删除某个值
    11 s1.discard(2)
    12 print(s1)
    13 #验证是否有共同部分
    14 s3={6,7}
    15 print(s1.isdisjoint(s3))
    16 #删除
    17 print(s1.pop()) #随机删除
    18 s1.discard(33333)#指定元素,若不存在也不报错
    19 s1.remove(333)#指定元素,若不存在则报错
    20 #更新
    21 s1.update('hello')
    22 print(s1)

    输出:

    {1, 2, 3, 4, 5, 6}
    {1, 2, 5, 6}
    {1, 5, 6}
    False
    1
    {5, 6}

    二.文件处理

    1.什么是文件
        文件是操作系统为应用程序或用户提供的一个操作硬盘的虚拟单位
    2.为什么要用文件
        应用程序中需要经常将内存的数据永久保存下来,而应用程序又无法直接操作硬盘,只能通过操作系统提供的单位去间接地操作硬盘
    3.如何用文件
    向操作系统发送打开文件的请求
    r:原生打开文件,不转义
    f=open(r'D:\tools\a.txt',mode='r')
    f=>应用程序中的一个值=>OS打开的文件a.txt=>硬盘中的一块空间
    data=f.read()
    总结:文件处理步骤
    1.打开文件
    2.读/写文件
    3.关闭文件
    上下文自动管理工具,code1运行完后会自动关闭文件并可以同时打开很多文件。
    wirh open(r'D:\tools\a.txt',mode='r') as f,\
         open (r'D:\tools\b.txt',mode='r') as f1:
         code1
    文件的打开模式:
    r:只读模式(默认的)
    w:只写模式
    a:只追加写
    控制操作文件内容模式有两种:(不能单独使用,必须与r,w,a连用)
    t:text文本模式(默认的),该模式下操作文件内容的单位都是字符串,该模式只适用于文本文件
        强调:该模式下必须指定encoding="某种字符编码"
    b:bytes二进制模式,该模式下操作文件的内容单位都是bytes,该模式适用于所有就类型的文件
     1 #r模式
     2 with open('a.txt',mode='rt',encoding='uth-8') as f:
     3     data1=f.read()
     4     print('First:',data1)
     5     data2=f.read()
     6     print('Second',data2)
     7     
     8     print(f.readable())
     9     print(f.writable())
    10     f.write('hello')
    11     
    12     line1=f.readline()
    13     print(line1,end='')
    14     print('===>')
    15     line2 = f.readline()
    16     print(line2,end='')
    17     
    18     l=f.readlines()
    19     print(1,type(1))

    输出:

    First: 你好啊
    aa
    wco
    Second

     1 #w模式:只写模式
     2 #文件不存在则创建一个空文件,并且文件指针跳到文件的开头
     3 #文件存在,会将内容清空,并且文件指针调用到文件开头
     4 #强调:1.如果每次打开都是重新打开文件,那么文件内容总会被清空
     5 #     2.如果在打开文件不关闭的情况下,连续写入,本次写入会跟着上次写入
     6 with open('b.txt',mode='wt',encoding='utf-8') as f:
     7     print(f.readable)
     8     list=['\naa\n','bb\n','cc\n','dd\n']
     9     f.write('你好')
    10     f.write('我的天')
    11     for line in list:  #法一:for写入
    12         f.write(line)
    13     #f.writelines(list) #法二:批量写入

    输出:

    <built-in method readable of _io.TextIOWrapper object at 0x0000019D984F4990>

    1 #a模式:只追加写模式
    2 #文件不存在则
    3 with open('b.txt',mode='at',encoding='utf-8') as f:
    4     print(f.readable())
    5     print(f.writable())
    6     f.write('你好\n')
    7     f.writelines(['aaa\n','bbb\n'])

    输出:

    False
    True

     1 #b模式:bytes二进制模式,该模式下操作文件内容单位都是bytes.
     2 #强调:一定不能指定encoding参数
     3 with open('1.mp4',mode='rb') as f:
     4     data=f.readline()
     5     print(data,type(data))
     6     
     7 with open('d.txt',mode='rb') as f:
     8     data=f.read()
     9     print(data,type(data))
    10     res=data.decode('utf-8')
    11     print(res)
    12     
    13 with open('d.txt','wb') as f
    14     f.write('hahahahah')
    15     
    16 #遍历文件内容的方式
    17 with open('d.txt',mode='rt',encoding='utf-8') as f:
    18     for line in f:
    19         print(line,end='') #取消默认换行符
     1 #文件内指针操作(掌握)
     2 #f.seek:单位统一是字节
     3 #第一个参数:控制移动的字节数
     4 #第二个参数:控制移动的参照物,值可以是0,1,2
     5 #0:参照文件开头(b和t模式都能用)
     6 #1:参照当前位置(只能在b模式用)
     7 #2:参照文件末尾(只能在b模式用)
     8 with open('a.txt','rt',encoding='utf-8') as f:
     9     f.seek(3,0) #单位是字节
    10     print(f.read())
    11     f.read()
    12     f.seek(0,0)
    13     print('第二次',f.read())

    输出:

    hggg
    第二次 ddd
    hggg

     1 #参照当前位置
     2 #储备:read(n)
     3 #read的n在t模式下代表字符个数
     4 #read的n在b模式下代表字节个数
     5 #其余都是字节
     6 
     7 with open('a.txt','rt',encoding='utf-8') as f:
     8     s=f.read(1)#指针在第三个bytes
     9     print(s)
    10     f.seek(6.0)
    11     print(f.read())

    输出:

    d
    ggg

     1 #文本编辑器修改文件原理:
     2 #优点:修改期间硬盘上同一时刻只有一份数据
     3 #缺点:占用内存过高
     4 with open('a.txt',mode='rt',encoding='utf-8') as f:
     5     data=f.read()
     6     new_data=data.replacce('a','b')
     7     print(new_data)
     8     
     9 with open('a.txt',mode='wt',encoding='utf-8') as
    10     f.wirte(new_data)
    11     
    12 #一行一行地读,一行一行地改:
    13 #以只读方式打开源文件,以写模式打开一个临时文件
    14 #然后for循环读取一行行内容,每读一行改一行,将修改结果写入临时文件,直至遍历完
    15 #删除源文件,将临时文件重命名为原文件名
    16 #缺点:占用2份硬盘空间
    17 with open('a.txt',mode='rt',encoding='utf-8') as src_f:\
    18     open('.a.txt.swap',mode='rt',encoding='utf-8') as tmp_f:\
    19     for line in src_f:
    20         if 'alex' in line:
    21             line=line.replace('alex','alexsb')
    22         temp_f.write(line)
    23         print(line)
    24 os.remove('a.txt')
    25 os.remove('.a.txt.swap','a.txt')
    三.函数
    1.什么是函数
        函数是具备某一功能的工具
        函数的使用必须遵循先定义后调用的原则
        事先准备工具的过程即函数的定义
        拿来就用即函数的调用
        函数分为两大类:
            a.内置函数
            b.自定义函数
    2.为何要用函数
        2.1 程序的组织结构不清晰,可读性差
        2.2 日积月累,冗余代码太多
        2.3 程序的可扩展性极差
    3.怎么用
        1).定义函数:只检测语法,不执行代码
        a.语法
        def 函数名(参数1,参数2,参数3)
            """
            文档注释
            """
            code1
            code2
            code3
            ...
            return 返回值
        b.
        c.定义函数的三种方式
            无参函数
            def func1(): #func1=函数的内存地址
                print('hello1')
            有参函数
             def func2(x,y):
                print('hello1')
            空函数
            def func3()
                pass
        2).调用函数
        a.语法:函数名()
        b.调用函数的过程
            i,根据函数名找到函数的内存地址
            ii,函数的内存地址加括号触发函数体代码的运行
        c.调用函数的三种方式
            i,语句
            ii,表达式形式
            iii,当作参数传给其他函数
        3).函数的返回值
           函数体代码运行的一个成果
           什么时候用函数的返回值?
           如何用返回值
           return 值:
           1. 返回值没有类型限制
           2. 返回值没有个数限制
               逗号分隔多个值时,返回一个元组
               没有return,默认返回None
    1 #示范一
    2 def bar():
    3     print('from bar')
    4 def foo():
    5     print('from foo')
    6     bar()
    7 foo()

    输出:

    from foo
    from bar

    1 #示范二
    2 def foo():
    3     print('from foo')
    4     bar()
    5 def bar():
    6     print('from bar')
    7 foo()

    输出:

    from foo
    from bar

    1 #示范三
    2 def foo():
    3     print('from foo')
    4     bar()
    5 foo()  
    6 def bar():
    7     print('from bar')

    输出:

    from foo
    from bar

    1 #函数调用:表达式形式
    2 def max(x,y):
    3     if x>y:
    4         return x
    5     else:
    6         return y
    7 res=max(1,2)
    8 print(res)

    输出:

    2

    1 #函数调用:当作参数传给其他函数
    2 def max(x,y):
    3     if x>y:
    4         return x
    5     else:
    6         return y
    7 res=max(max(1,2),3)
    8 print(res)

    输出:

    3

    1 #return是函数结束的标志
    2 #函数内可以有多个return,但只要执行一次,函数体则结束
    3 def f1():
    4     print(1)
    5     return 'aa'
    6     print(2)
    7     return 'bb'
     
     
  • 相关阅读:
    map()和filter()函数讲解与示例
    通过假设巧妙的判断出参数的最大值和最小值
    通过函数定义数据结构list中的每个元素是一个元组,扑克牌示例
    FileCloud 的原理简述&自己搭建文件云
    opengl学习笔记
    Pascal的sin^-1函数实现
    OpenGL键盘交互响应事件
    OpenGL 鼠标交互响应事件
    重踏比尔盖茨走过的路——模拟操作系统
    Pascal代码自动格式化
  • 原文地址:https://www.cnblogs.com/dingchuan/p/9325941.html
Copyright © 2011-2022 走看看