函数初识
一. 文件操作知识回顾
文件操作的流程:
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. 万能参数:接受实参角度所有的位置参数,关键字参数。