函数初识

. 文件操作知识回顾

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

原文地址:https://www.cnblogs.com/shawnhuang/p/10190569.html