一. 文件操作知识回顾
文件操作的流程:
1. 打开文件,创建文件句柄
2. 对文件句柄进行操作
3. 关闭文件句柄
读
r r+ rb r+b
读取方法:
read() 全部读取
read(n) 读取一部分
r 模式:n代表n个字符
b 模式:n代表n个字节
readline() 按行读取
readlines() 返回列表,列表中的每个元素是文件的每一行
for 循环
写
w w+ wb w+b
如果没有文件,创建文件写入内容
如果有文件,清空内容,写入新内容
追加
a a+ ab a+b
如果没有文件,创建文件写入内容
如果有文件,在文件的最后追加新内容
带 b 的模式:
操作的非文本类的文件
其他操作方法:
readable()
writable()
seek()
tell()
flush()
truncate()
文件操作的改:
都是以新旧文件的操作来改文件
1. 以读模式打开原文件,产生文件句柄f1
2. 以写模式打开新文件,产生文件句柄f2
3. 读取原文件内容,修改成新内容后写入新文件
4. 删除原文件
5. 将新文件重命名为原文件名
二. 函数
1 # 面向过程编程:
2 # 1. 代码重复性多
3 # 2. 代码的可读性差
4
5 l = [1, 2, 3, 4]
6 count = 0
7 for i in l:
8 count += 1
9 print(count)
10
11 # 函数式编程
12
13 # 函数:
14 # 一个函数封装一个功能
15
16 def my_len():
17 count = 0
18 for i in l1:
19 count += 1
20 print(count)
21
22 my_len()
1 # 探探
2
3 print("打开探探")
4 print("附件的人")
5 print("左滑一下")
6 print("右滑一下")
7 print("锁定目标,联系")
8 print("相约...")
9
10 # 上面重复代码较多,可以整合到一个函数中
11
12 def date():
13 print("打开探探")
14 print("附件的人")
15 print("左滑一下")
16 print("右滑一下")
17 print("锁定目标,联系")
18 print("相约...")
19
20
21 date() # 调用函数,只有这步才能执行上面的函数
22
23 # 要调用几次,就写几个 date()
1 # return 用法
2
3 def date():
4 print("打开探探")
5 print("附件的人")
6 print("左滑一下")
7 print("右滑一下")
8 print("锁定目标,联系")
9 print("相约...")
10 return
11 print("锁定目标,联系")
12 print("相约...")
13
14
15 date()
16 print(666)
17
18 # 1. 函数中遇到 return 直接结束
19 # 2. 给函数的执行者(调用者,即 date())返回值
20 # 单独的return返回None
21
22 def date():
23 print("打开探探")
24 print("附件的人")
25 print("左滑一下")
26 print("右滑一下")
27 print("锁定目标,联系")
28 print("相约...")
29 return
30
31 date()
32
33
34 # return 单个值就返回单个值
35 def date():
36 print("打开探探")
37 print("附件的人")
38 print("左滑一下")
39 print("右滑一下")
40 print("锁定目标,联系")
41 print("相约...")
42 return "前凸后翘的美女"
43
44
45 ret = date()
46 print(ret) # 前凸后翘的美女
47
48 def date():
49 print("打开探探")
50 print("附件的人")
51 print("左滑一下")
52 print("右滑一下")
53 print("锁定目标,联系")
54 print("相约...")
55 return [1, 2, 3]
56
57
58 ret = date()
59 print(ret) # [1, 2, 3]
60
61 # return 多个值,返回一个元组
62
63 def date():
64 print("打开探探")
65 print("附件的人")
66 print("左滑一下")
67 print("右滑一下")
68 print("锁定目标,联系")
69 print("相约...")
70 return "金刚芭比", "洛天依", "天海翼"
71
72
73 ret = date()
74 print(ret) # ('金刚芭比', '洛天依', '天海翼')
75
76 def date():
77 print("打开探探")
78 print("附件的人")
79 print("左滑一下")
80 print("右滑一下")
81 print("锁定目标,联系")
82 print("相约...")
83 return "金刚芭比", "洛天依", "天海翼"
84
85
86 wangzi, yongge, wang = date()
87 print(wangzi) # 金刚芭比
88 print(yongge) # 洛天依
89 print(wang) # 天海翼
1 # 函数的参数
2
3 def date(a, b): # 函数的定义:形参
4 print(a, b)
5 print("打开探探")
6 print("附件的人")
7 print("左滑一下")
8 print("右滑一下")
9 print("锁定目标,联系")
10 print("相约...")
11
12
13 x = 2
14 y = 3
15 date(x, y) # 函数的执行者:实参
1 # 实参
2 # 位置参数:必须与形参角度的位置从左到右一一对应,否则会报错
3
4 def date(sex, position):
5 print("打开探探")
6 print("%s附件的%s" %(position, sex))
7 print("左滑一下")
8 print("右滑一下")
9 print("锁定目标,联系")
10 print("相约...")
11
12 date("女性", "深圳")
13
14 # 打开探探
15 # 深圳附件的女性
16 # 左滑一下
17 # 右滑一下
18 # 锁定目标,联系
19 # 相约...
1 # 写一个函数,完成一个功能:给函数传入两个数字对象,将大的数字返回给函数的调用者
2
3 def larger_number(a, b):
4 if a > b:
5 return a
6 else:
7 return b
8
9 s = larger_number(100, 102)
10 print(s) # 102
11
12 if a > b:
13 return a
14 else:
15 return b
16
17 # 这种简单的搭配可以用三元运算符
18
19 ret = 666 if 3 > 2 else 777
20 print(ret)
21
22 # 所以上面的条件判断可以写成
23
24 ret = a if a > b else b
25
26 def larger_number(a, b):
27 if a > b:
28 return a
29 else:
30 return b
31
32 s = larger_number(100, 102)
33 print(s)
34
35 # 上面可以简写成:
36
37 def larger_number(a, b):
38 ret = a if a > b else b
39 return ret
40
41
42 larger_number(100, 101)
43
44 # 还可以简写成
45
46 def larger_number(a, b): return a if a > b else b
47
48
49 ret = larger_number(100, 102)
50 print(ret)
1 # 关键字参数
2 # 必须一一对应,可以不按顺序
3
4 def date(sex, position, soft):
5 print("打开手机")
6 print("打开%s软件,搜索%s附件的%s" %(soft, position, sex))
7 print("左滑一下")
8 print("右滑一下")
9 print("锁定目标,联系")
10 print("相约...")
11
12 date(soft="微信", sex="girl", position="深圳南山区")
13
14 # 打开手机
15 # 打开微信软件,搜索深圳南山区附件的girl
16 # 左滑一下
17 # 右滑一下
18 # 锁定目标,联系
19 # 相约...
1 # 混合参数——既有位置参数,又有关键字参数
2
3 def date(meet_place, sex, position, soft):
4 print("打开手机")
5 print("打开%s软件,搜索%s附件的%s" % (soft, position, sex))
6 print("左滑一下")
7 print("右滑一下")
8 print("锁定目标,联系")
9 print("相约%s" % meet_place)
10
11 # 位置参数必须在关键字参数前面
12 date("酒吧", soft="微信", sex="girl", position="深圳南山区")
13
14 # 打开手机
15 # 打开微信软件,搜索深圳南山区附件的girl
16 # 左滑一下
17 # 右滑一下
18 # 锁定目标,联系
19 # 相约酒吧
实参角度:
1. 位置参数——从左到右一一对应
2. 关键字参数——一一对应,可以不按顺序
3. 混合参数——位置参数一定要在关键字参数前面
1 # 形参角度:
2 # 1. 位置参数——与实参角度的位置参数一样,要从左到右一一对应
3
4 def date(sex, position):
5 print("打开探探")
6 print("%s附件的%s" %(position, sex))
7 print("左滑一下")
8 print("右滑一下")
9 print("锁定目标,联系")
10 print("相约...")
11
12
13 date("女性", "深圳")
1 # 2. 默认参数——给形参设置默认值,通常是常用的数值,可改可不改
2 # 注意:默认参数一定要在位置参数后面
3
4 # 示例一
5 def date(meet_place, position, soft, sex="girl"):
6 print("打开手机")
7 print("打开%s软件,搜索%s附件的%s" % (soft, position, sex))
8 print("左滑一下")
9 print("右滑一下")
10 print("锁定目标,联系")
11 print("相约%s" % meet_place)
12
13
14 date("酒吧", soft="微信", position="深圳南山区")
15
16 # 示例二
17 def date(meet_place, position, soft, sex="girl"):
18 print("打开手机")
19 print("打开%s软件,搜索%s附件的%s" % (soft, position, sex))
20 print("左滑一下")
21 print("右滑一下")
22 print("锁定目标,联系")
23 print("相约%s" % meet_place)
24
25
26 date("酒吧", soft="微信", position="深圳南山区", sex="lady_boy") # 注意这里默认参数可以改变
27
28 # 打开手机
29 # 打开微信软件,搜索深圳南山区附件的lady_boy
30 # 左滑一下
31 # 右滑一下
32 # 锁定目标,联系
33 # 相约酒吧
1 # 默认参数的陷阱
2 # 默认参数指向的是一个容器型数据类型,那么这个数据永远是同一个(内存地址)
3
4 def func1(a, l1=[]):
5 l1.append(a)
6 return l1
7
8 print(func1(666)) # [666]
9 print(func1(22)) # [666, 22]
10 print(func1(33, [])) # [33]
11 # 第三次主动传入了一个空列表
12
13 def extendList(val, list=[]):
14 list.append(val)
15 return list
16
17 list1 = extendList(10)
18 list2 = extendList(123, [])
19 list3 = extendList('a')
20
21 print('list1=%s' % list1)
22 print('list2=%s' % list2)
23 print('list3=%s' % list3)
24
25 # list1=[10, 'a']
26 # list2=[123]
27 # list3=[10, 'a']
28 # 这里注意先是全部执行了 print 前面的内容再打印结果的,注意与下面的区别
29
30 def extendList(val, list=[]):
31 list.append(val)
32 return list
33
34 list1 = extendList(10)
35 print('list1=%s' % list1)
36 list2 = extendList(123, [])
37 print('list2=%s' % list2)
38 list3 = extendList('a')
39 print('list3=%s' % list3)
40
41 # list1=[10] # 有了print阻断了三者都运行的顺序,这里只添加了10
42 # list2=[123] # 说明新传进一个空列表在内存中指向另一个地址
43 # list3=[10, 'a'] # 说明10和"a"指向内存中同一个地址
1 # 万能参数
2 # 两个形参参数,接收所有的位置参数和关键字参数
3 # 又称动态参数、不定长传参,就是你需要传给函数的参数很多,不定个数时,就用*args,**kwargs接收
4 # args是元祖形式,接收除去键值对以外的所有参数,kwargs接收的只是键值对的参数,并保存在字典中。
5
6 def date(*args, **kwargs):
7 print(args)
8 print(kwargs)
9
10 date("深圳南山区", "18-30", "23", 13, position="深圳南山区", sex="lady_boy")
11
12 # ('深圳南山区', '18-30', '23', 13)
13 # {'position': '深圳南山区', 'sex': 'lady_boy'}
形参角度:
# 1. 位置参数——从左到右,一一对应
# 2. 默认参数,放在位置参数后面
# 3. 万能参数:接受实参角度所有的位置参数,关键字参数。