day 7 -10 集合,文本、文件操作,函数

day7

一、回顾

1、列表和字典在循环里边尽量不要删除元素,很麻烦

2、元组:如果元组里边只有一个逗号,且不加逗号,次元素是什么类型,就是什么类型。

二、集合

 1 '''
 2 集合:可变的数据类型,它里边的元素,是不可变数据类型;无序,不重复
 3    {}
 4 '''
 5 #错的:
 6 # set1 = set({1, 2, 3})
 7 # set2 = {1, 2, 3, [2, 3], {'name': "alex"}}
 8 
 9 # 对的
10 set1 = {'alex', 'wusir', 'ritian', 'egon', 'barry', 'barry'}
11 # 增add、update
12 # add
13 # set1.add('女神')
14 # update
15 # set1.update('abv')
16 
17 # 删
18 # pop:随机删除
19 # set1.pop()      # 返回删除的元素
20 # remove:按照元素删除
21 # set1.remove("alex")     # 没有元素会报错
22 # set1.clear()
23 
24 # 查
25 # for i in set1:
26 #     print(i)
27 
28 # 集合
29 set1 = {1, 2, 3, 4, 5}
30 set2 = {4, 5, 6, 7, 8}
31 
32 # 交集
33 # print(set1 & set2)
34 # print(set1.intersection(set2))
35 
36 # 并集
37 # print(set1 | set2)
38 # print(set2.union(set1))
39 
40 # 反交集
41 # print(set1 ^ set2)
42 # print(set1.symmetric_difference(set2))
43 
44 # 差集
45 # print(set1 - set2)
46 # print(set1.difference(set2))
47 
48 # 子集:返回True 或者 False
49 # set1 = {1, 2, 3}
50 # set2 = {1, 2, 3, 4, 5, 6}
51 # print(set1 < set2)
52 # print(set1.issubset(set2))
53 # 超集:返回True 或者 False
54 # print(set1 > set2)
55 # print(set1.issuperset(set2))
56 
57 # 去重
58 # li = [1,2,33,54,2,33,54,66,7,8,6,1]
59 # li = set(li)
60 # li = list(li)
61 # print(li)
62 
63 # 冻住集合,变为不可变类型
64 s = frozenset('barry')

 

day8

1、文件操作

 1 # 绝对路径D:\测试.txt
 2 # f = open('D:\测试.txt', mode='r', encoding='gb2312')
 3 # contert = f.read()
 4 # print(contert, type(contert))
 5 # f.close()
 6 
 7 # 只读r
 8 # f = open('log', mode='r', encoding='utf-8')
 9 # contert = f.read()
10 # print('{}\n{}'.format(contert, type(contert)))
11 # f.close()
12 
13 # 只读rb
14 # f = open('测试', mode='rb')
15 # contert = f.read()
16 # print('{}\n{}'.format(contert, type(contert)))
17 # f.close()
18 
19 
20 # 写w:没有的话创建,有的话覆盖原文件
21 # 没有创建
22 # f = open('log', mode='w', encoding='utf-8')
23 # f.write('骑兵步兵')
24 # f.close()
25 # 覆盖
26 # f = open('log', mode='w', encoding='utf-8')
27 # f.write('经典拉扣设计的啦')
28 # f.close()
29 
30 # 写wb:
31 # f = open('log', mode='wb')
32 # f.write('大手大脚拉开手机'.encode('utf-8'))
33 # f.close()
34 
35 # 追加
36 # a
37 # f = open('log', mode='a', encoding='utf-8')
38 # f.write('\n追加文字"啦啦啦啦啦啦"')
39 # f.close()
40 
41 # ab
42 # f = open('log', mode='ab')
43 # f.write('追加文字"啦啦啦啦啦啦"'.encode('utf-8'))
44 # f.close()
45 
46 
47 # 读写'r+':先读,再写
48 # f = open('log', mode='r+', encoding='utf-8')
49 # print(f.read())
50 # f.write('\n读写“哈哈哈”')
51 # f.close()
52 
53 # 读写r‘+’:先写再读    这种方式会重头开始写,然后一个字符一个字符的覆盖原有内容
54 # f = open('log', mode='r+', encoding='utf-8')
55 # f.write('aaa')
56 # print(f.read())
57 # f.close()
58 
59 # 写读:w+
60 # f = open('log', mode='w+', encoding='utf-8')
61 # f.write('aaa')
62 # f.seek(0)
63 # print(f.read())
64 # f.close()
65 
66 
67 # 功能详解
68 f = open('log', mode='r+', encoding='utf-8')
69 # content = f.read(3)       # 前三个字符
70 # f.seek(14)                # 按照字节进行跳转光标
71 # f.tell()                  # 告诉你光标的位置
72 # f.readable()              # 判断是否可读
73 # f.readline()              # 一行一行的读
74 # print(f.readlines())      # 每一行当成列表中的元素,添加到list中
75 # f.truncate(3)               # 截取前三个
76 # for line in f:
77 #     print(line)
78 # f.close()
79 
80 # 追加查看
81 #  f = open('log', mode='a+', encoding='utf-8')
82 # f.write('\n追加文字李二')
83 # f.seek(f.tell()-9)
84 # print(f.read(2))
85 # f.close()
86 
87 #with 循环
88 # with open('log', mode='a', encoding='utf-8') as l, \
89 #         open('测试', mode='a', encoding='utf-8') as c:
90 #     l.seek(6)
91 #     l.write('咚')
92 #     c.seek(6)
93 #     c.write('咚')
文本文件操作

2、解码

1 s = 'abf'
2 b = s.encode('utf-8')
3 print(b)
4 #byte --->str decode 解码
5 s1 = b.decode('gbk')
6 print(s1)

 day9

1、复习

 1 # 文件处理
 2 
 3     # 打开文件
 4         # open(‘路径’,mode'打开方式',encoding'编码方式')
 5         # 打开方式 r w a r+(可读可写) w+(可写可读) a+(可追加可读) b
 6             # r+ 打开文件直接写 和读完再写
 7         # 编码方式:一般用utf-8
 8     # 操作文件
 9         # 读:
10             # read:一次性读
11             # readlines:一次性读
12             # readline:一行一行读
13                 # 不知道哪里结束
14                 # 视频、图片是 用rb打开 文件是bytes,可以按照字节读
15             # for循环 --> 最好
16         # 写:
17             # write:
18         # 光标 ——> 文件指针
19             # seek ——> 指定光标移动到某个位置
20             # tell ——> 获取光标位置
21             # truncate ——> 截取文件
22     # 关闭文件
23         # close
24     # 修改文件
25         # 文件python没有提供
26 
27 
28 # 修改文件方法
29 # with open('小护士班主任',encoding='utf-8') as f,open('小护士班主任.bak','w',encoding='utf-8') as f2:
30 #     for line in f:
31 #         if '星儿' in line:  #班主任:星儿
32 #             line = line.replace('星儿','啊娇')
33 #         #写文件
34 #         f2.write(line) #小护士:金老板
35 #
36 # import os
37 # os.remove('小护士班主任') #删除文件
38 # os.rename('小护士班主任.bak','小护士班主任')  #重命名文件
文件操作复习

2、返回值

 1 # def my_main():
 2 #     return "返回值"
 3 
 4 # 返回值三种情况:
 5 # 1、没有返回值:①不写return ②只写return ③ return None
 6 #
 7 # def func():
 8 #     l = ['老大', '老二']
 9 
10 # ②只写return,没有返回值
11 # def func():
12 #     l = ['老大', '老二']
13 #     return
14 
15 
16 # 2、返回一个值:可以返回任何数据类型,只要返回了就可以接受
17 # def func():
18 #     return [1, 2, 3, 4]
19 # print(func())
20 
21 
22 # 3、返回多个值:可以用多个变量接收、也可以用一个变量接受,会接受一个元祖
23 #     def func():
24 #         return 1, 2
25 #
26 #
27 #     a, b = func()
28 #     print(a, b)
29 # 参数,定义时候的参数叫做形参,传入参数叫做实参
30 # def my_len(形参)
31 #     print('6')
32 # my_len('实参')
def定义函数的返回值

3、函数的参数问题

 1 # 没有参数
 2 #   定义参数和调用参数的括号都不写内容
 3 # 有一个参数
 4 #   传什么就是什么
 5 # 有多个参数
 6     # 按照位置传参
 7     # def my_sum(a, b):
 8     #     res = a + b
 9     #     return res
10     # my_sum(1, 2)
11 
12     # 按照关键字传参
13     # def my_sum(a, b):
14     #     res = a + b
15     #     return res
16     # my_sum(b = 2, a = 1)
17 
18     # 混着用:必须先按照位置传参,再按照关键字传参
19     # def my_sum(a, b):
20     #     res = a + b
21     #     return res
22     # my_sum(1, b = 2)
23 
24     # 动态传参
25         # def func(*args):
26         #     print(args)
27         # l = [1,2,3,4,5]
28         # func(*l)
29         # def func(**kwargs):
30         #     print(kwargs)
31         # d = {'a':1,'b':2}
32         # func(**d)
33 
34 # 站在形参角度
35     # 位置参数:必须传,且有几个参数就传几个值
36     # 默认参数:可以不传,不传的话使用默认值
37 
38     # def classmate(name, sex='男'):
39     #     print('%s : %s' % (name, sex))
40     # classmate('二哥')
41     # classmate('小孟', '男')
42     # classmate('大猛', '男')
43     # classmate('朗哥', '女')
44 
45     # 动态参数:可以接受任意个参数*args必须在**kwargs之前
46         # ①*args:接收的是按照位置传参的值,组织成一个元祖
47         # ②**kwargs:接收是按照关键字传参的,组成一个字典
48     # def my_sum(*args):
49     #     n = 0
50     #     for i in args:
51     #         n += i
52     #     return n
53     # print(my_sum(1, 2, 3, 4))
54 # 形参参数的定义顺序:位置参数,*args,默认参数,**kwargs
55 
56 
57 # 函数的注释
58 def func(l,b):
59     """
60 
61     :param l:
62     :param b:
63     """
函数的形参和实参

 

day10

1、复习和作业讲解

 

2、默认函数陷阱

 1 def qqxing(l = []):
 2     l.append(1)
 3     print(l)
 4 
 5 
 6 qqxing()
 7 qqxing([])
 8 qqxing()
 9 qqxing()
10 
11 # 如果默认参数的值是一个可变数据类型,那么每一次调用函数的时候,如果不传值就公用这个数据类型的资源
默认函数陷阱

3、函数的命名空间

 1 # 函数进阶
 2 
 3 # 命名空间个作用域
 4 
 5 # 内置的命名空间
 6     # 就是python解释器一启动就可以使用的名字存置命名空间中
 7     # 内置命名在启动python解释器的时候被加载进内存里
 8 # 全局命名空间
 9     # 实在程序从上到下被执行的过程中依次被加载进内存的
10     # 放置了我们设置的所有变量和函数命
11 # 局部命名空间
12     # 就是函数内部的名字
13     # 就是调用函数的时候 才会产生这个命名空间,随着函数执行的结束,这个名称空间就消失了
14 
15 # 在局部:可以使用全局、内置命名空间中的名字
16 # 在全局:可以使用内置命名空间的名字,但是不能使用局部
17 # 再内置:不能使用局部和全局的名字的
18 
19 
20 # 作用域
21 # 全局作用域 -- 作用在全局 -- 内置和全局名字空间中的名字都属于全局作用域 -- locals
22 # 局部作用域 -- 作用在局部 -- 函数(局部名字空间中的名字属于局部作用域) -- globals
23 a = 1
24 b = 2
25 def func():
26     x = 'aaa'
27     y = 'bbb'
28     print(locals())
29 func()
30 print(globals())
31 # globals:永远打印全局的名字
32 # locals:输出什么,根据locals所在的位置
33 
34 
35 # a = [1,2]
36 # def dunc():
37 #     a.append(3)
38 # dunc()
39 # print(a)
40 
41 # 对于不可变数据,在局部可以查看全局作用域中的变量
42 # 但是不能修改
43 # 如果想要修改,需在程序的一开始添加global生命
44 # 如果在一个局部(函数)内声明一个global变量,那么这个变量在局部的所有操作对全局的变量有效
函数的命名空间

4、函数的嵌套和作用域链

 1 # def max(a, b):
 2 #     return a if a > b else b
 3 #
 4 #
 5 # def the_max(x, y, z):  # 函数的嵌套调用
 6 #     c = max(x, y)
 7 #     return max(c, z)
 8 #
 9 #
10 # print(the_max(1, 2, 3))
11 
12 
13 # nonlocal 只能用于局部变量,找上层中离当前最近一层的局部变量
14 
15 # 闭包
16 a = 1
17 
18 
19 def outer(a):
20 
21     def inner():
22         nonlocal a
23         a += 1
24         print(a)
25     # print(inner.__closure__)        # 点有这个不返回None就会就是闭包
26     return inner
27 
28 
29 inner = outer(5)
30 
31 inner()
32 
33 # import urllib   # 模块,就是一个python文件
34 # from urllib.request import urlopen
35 # urlopen('')
函数的嵌套和作用域链(闭包)

 

转载于:https://www.cnblogs.com/-xuan/p/9973849.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值