dingchuan

上节课复习:
    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\'

 

 
 

分类:

技术点:

相关文章:

  • 2021-08-03
  • 2021-12-22
  • 2021-07-22
  • 2022-12-23
  • 2022-12-23
  • 2021-07-20
  • 2021-06-26
  • 2021-05-18
猜你喜欢
  • 2021-10-14
  • 2021-07-18
  • 2022-01-14
  • 2022-02-07
  • 2021-06-30
  • 2022-12-23
  • 2021-12-30
相关资源
相似解决方案