一、函数
1、函数:可以完成特定功能的代码块,函数就是存放代码块的容器
2、定义函数的语法:
函数四部分:(函数执行的本质:执行函数体,得到函数返回值)
①函数名
②函数体
③返回值
④参数
用def关键词来声明函数 def 函数名(参数们) 函数体 return返回值 例如: def fn(money): print('你付了%s元钱' % money) print('函数的一行代码') print('函数的二行代码') return '冰红茶' # print(fn, id(fn)) # fn直接打印,只能看到函数存放代码的地址 # fn(10) msg = fn(10) print(msg) # 函数的返回值也称之为函数值,就是函数执行结束后的结果 # 可以用变量接受 | 可以直接打印 | 可以直接使用
3、如何使用函数(函数一定要先定义在调用)
函数名:拿到函数的地址
函数名(): 拿到函数的地址,并执行函数中存放的代码块(函数体) *****
函数名(参数):执行函数并传入参数
函数名(): 执行完毕后,会得到函数的返回值,返回值就跟普通变量一样,可以直接打印、使用、运算
def fn(num): print("传入的num值:%s" % num) return '收到了' res = fn(10) # 控制台会打印:传入的num值:10 # res的值为:'收到了'
4、函数的分类
①按函数体进行分类
# 计算 # 1、空函数:项目之初,知道项目有哪些功能,但还没有明确功能体,可以用pass进行函数体填充 def computed(): pass # 2、非空函数:用函数体 def add_num(n1, n2): ''' 函数的注释 :param n1: 第一个数 :param n2: 第二个数 :return: 两个数之和 ''' return n1 + n2 computed() res = add_num(10, 20) # 结果为 30 print(res) a = 50 b = 100 print(add_num(a, b)) # 结果为 150
②按参数列表进行分类
# 1、无参函数:函数体运行不需要外界提供参数 def print_msg(): print("欢迎大家来到老男孩教育,奉献你的余生!!!") print_msg() # 2、有参函数:函数体运行需要外界提供参数 def print_school_msg(p1, p2): print("欢迎%s和%s领导莅临老男孩教育,敞开你的腰包!!!" % (p1, p2)) p1 = input("输入一号领导名:") p2 = input("输入二号领导名:") print_school_msg(p1, p2)
③按返回值进行分类:return是用来结束函数的
# 空返回 1. 没有return的函数 2. 空return # 值返回 3. return一个值 4. return多个值 # 空返回 def fn1(): print('fn1 run!!!') res = fn1() print('没有return关键字的返回值:%s' % res) # None def fn2(): print('fn2 run!!!') return return None res = fn2() print('空return关键字的返回值:%s' % res) # None # 无return函数与空return函数的区别 # 空return:可以根据具体情况主动退出函数(像break结束循环一样) def fn3(msg): print('fn3 第一行逻辑') # msg信息不正常:'' | None if msg == '' or msg is None: # 结束函数 return print('msg信息正常: %s' % msg) msg = input('msg: ') fn3(msg) # 值返回 # 一个值的返回 def add_num(n1, n2): return n1 + n2 print(add_num(10, 15)) def computed(n1, n2): # 返回四则运算的结果 r1 = n1 + n2 r2 = n1 - n2 r3 = n1 / n2 r4 = n1 * n2 return [r1, r2, r3, r4] a, b, c, d = computed(50, 25) print(a, b, c, d) # 多个值的返回: 本质就是返回装有多个值的元组 def computed_sup(n1, n2): # 返回四则运算的结果 r1 = n1 + n2 r2 = n1 - n2 r3 = n1 // n2 r4 = n1 ** n2 return r1, r2, r3, r4 a, b, c, d = computed_sup(50, 25) print(a, b, c, d) res = computed_sup(50, 25) # 得到的是装有所有结果的元组 print(res)
5、函数的嵌套调用
①定义:在一个函数内调用另一个函数。在解释过程中,不执行函数体,在函数被调用时,函数体才被执行
def fn1(): print('fn1 run') fn2() def fn2(): print('fn2 run') fn3() def fn3(): print('fn3 run') # 注:在fn1中调用了fn2,所以调用fn1的逻辑应该在fn2定义之后 fn1()
②案例
# 案例:用函数实现获取两个数的最大值 def max_2(n1, n2): if n1 > n2: return n1 return n2 print(max_2(200, 30)) # 获取三个数的最大值 def max_3(n1, n2, n3): if n1 > n2 and n1 > n3: return n1 if n2 > n1 and n2 > n3: return n2 return n3 def max_3(n1, n2, n3): m2 = max_2(n1, n2) return max_2(m2, n3) print(max_3(300, 30, 30)) # 四个数 def max_4(n1, n2, n3, n4): m2 = max_2(n1, n2) return max_3(m2, n3, n4) print(max_4(10,30,20,0))
6、指定文件名的文件复制
def copy_file(source, target): ''' :param source: 被复制的文件 :param target: 复制得到的文件 :return: ''' with open(source, 'rb') as r, open(target, 'wb') as w: for line in r: w.write(line) copy_file('cmd.txt', 'aaa.txt') copy_file('temp.txt', 'ttt.txt')