1,函数介绍
-
目的: 函数的作用
-
""" 函数的作用: 1, 代码复用性提高了 2, 可维护性提高 """
2,函数定义
-
目的: 知道函数的组成, 定义, 调用
-
操作流程:
""" 函数定义: def 函数名(参数1:类型1, 参数2:类型2) -> 声明返回值类型 ... return 返回值 函数组成说明: 1, def 函数名需要遵守标识符规则; 必须 2, 参数(形式参数); 不必须 3, 声明返回值类型; 不必须 4, return 返回值; 不必须 函数的调用: 函数名(参数1,参数2) 函数种类(参数,返回值): 1, 无参数,无返回值 2, 无参数,有返回值 3, 有参数,无返回值 4, 有参数,有返回值 注意点: 1, 函数定义好之后,不调用,不会执行 """"" #1,定义一个函数,没有参数,没有返回值 def haha(): print("你调用了哈哈") # haha() #2, 定义函数, 无参数,有返回值 def get_age() -> int: return 30 # age = get_age() # print(age) #3, 定义函数,有参数,无返回值 # def get_num(name:str,age:int): # print("我的名字是{}, 今年{}岁了".format(name,age)) # # get_num("迪丽热巴",23) #4,定义函数,4, 有参数,有返回值 def get_sum(num1:int,num2:int) -> int: return num1 + num2 result = get_sum(100,200) print("result = {}".format(result))
3,函数参数
-
目的: 掌握函数参数的其他几种用法
-
操作流程
""" 函数参数设置方式: 1, 缺省参数, 可以设置默认值 2, 不定长参数,元祖格式(*args),可以接受多个参数, 如果需要指明特定参数,需要将参数写在最前面 3, 不定长参数,字典格式(**kwargs),可以接受多个键值对 """ #1, 定义函数, 设置缺省参数(可以不用传递,其实就是一个默认值) def test(num1:int,num2:int = 100) -> int: return num1 + num2 # print(test(10,1)) #2, 定义参数, 设置不定长参数(不确定函数需要设置几个参数), args元祖类型,可以接受多个参数 # name为指定参数, 一定要写在最前面 def test2(name:str,*args): print(args) print(name) # print(type(args)) # test2("张三",2,3,4,5,6,10) #3, 定义参数, 设置不定长参数字典格式; **kwargs可以接受字典 def test3(*args,**kwargs): print(args) print(kwargs) test3("张三",2,3,4,5,6,10,a=10,b=20,c=30)
4,函数返回值
-
目的: 掌握函数返回值的作用
-
操作流程
""" 返回值特点: 1, 一旦进行return,那么函数马上结束,函数后面的内容不会执行 2, 如果return多个值, 会将多个值封装成一个元祖进行返回 """"" #1,定义函数,设置返回值 def sum(num1,num2): return num1 + num2 # 一旦进行return,那么函数马上结束,函数后面的内容不会执行 # print("hahahha") # print(sum(10,20)) #2,定义函数,设置多个返回值(元祖格式) def sum2(num1,num2) -> tuple: return num1 + num2, num1 * num2, num1-num2 print(sum2(3,5))
5,函数嵌套
-
目的: 掌握函数的嵌套调用
-
操作流程
#1,开始上班 def start_work(name): coding(name) #2,写代码 def coding(name:str): print("{},开始写代码".format(name)) debug() #3,调试程序 def debug(): print("调试程序") online() #4,项目上线 def online(): print("项目上线鸟,好开心") start_work("雷军")
6,函数练习
-
目的: 掌握函数的练习
-
操作流程
""" 需求: 给定列表[1,2,3,4,5] 求出他们列表和, 平均数 """"" #1, 求和 def get_sum(list) -> int: """求给定列表的和""" sum = 0 for i in list: sum += i # sum = sum +i return sum #2, 求平均数 def get_avg(list,sum): return sum / len(list) sum = get_sum([1,2,3,4,5]) avg = get_avg([1,2,3,4,5],sum) print("sum = {}, avg = {}".format(sum,avg)) # 获取函数的文档注释 print(get_sum.__doc__) # 求给定列表的和 print(get_avg.__doc__) # None
7,局部全局变量
-
目的: 掌握python中局部,全局变量的特点
-
操作流程
""" 全部变量&局部变量: 1, 在函数外部定义的变量, 全局变量 2, 在函数内部定义的变量是局部变量 注意点: 1, 在函数内部默认使用的是局部变量(就近原则) 2, 在函数外部使用的变量是全局变量 3, 局部变量提权(全局变量), global 变量名 """"" #1,定义变量,全局变量(特点: 定义在函数外部, 其他的函数都能使用) a = 10 def test(): # global a #提权, 将局部变量转换成全局变量 a = 20 print("test a = {}".format(a)) def test2(): a = 30 print("test2 a = {}".format(a)) test() test2() #输出a, 值是多少? 10 print("函数外部 a = {}".format(a))
8,变量引用
-
目的: 知道python中的变量引用两种方式(数值传递, 引用传递)
-
操作流程
#1, 数值引用, 可以通过系统函数id()查看变量的内存地址 # a = 10 # b = a # a = 20 # print("b = {}".format(b)) # print(id(a)) # 输出内存地址 # print(id(b)) #2, 地址引用; 两个人完全穿的是同一条"裤子" # a = [1,2,3] # b = a # a.append("哈哈") # b.append("嘻嘻") # print(a) # print(id(a)) # 两者内存地址完全一样 # print(id(b)) #3, 函数数值传递 # def change_number(num1): # num1 = 10 # # num1 = 5 # change_number(num1) # print("num1 = {}".format(num1)) #4, 引用传递 def change_list(a): a.append("哈哈") list = [1,2,3,4] change_list(list) print(list)
9,可变和不可变类型
-
目的: 知道哪些数据类型是可变的(引用), 哪些是不可变的(数值)
-
操作流程
""" ################一, 数值传递 #################### """"" # 数字, 字符串, 元祖 #1,字符串数值传递 -> 不可变类型 # a = "张三" # b = a # a = "李四" # print(b) #2, 元祖数值传递 # tuple1 = (1,2,3) # tuple2 = tuple1 # tuple1 = (4,5,6) # print(tuple2) """ ################二, 引用传递 #################### """"" # 可变类型: 列表, 字典 # list1 = ["a","b","c"] # list2 = list1 # list1.append("d") # print(list2) dict1 = { "name":"迪丽热巴", "age":33 } dict2 = dict1 dict1["sex"] = "女" print(dict2)
10, 函数递归
-
目的: 知道递归的执行流程
-
操作流程
""" 需求: 求10! = 10 * 9 * 8 * 7 *6...1 """"" #1,使用for循环求10的阶层 sum = 1 for i in range(1,11): sum *= i # sum = sum * i print("sum = {}".format(sum)) #2,使用递归方式实现 def recursion(num): if num > 1: result = num * recursion(num-1) else: return 1 return result print(recursion(10))
11, 内置函数
-
目的: 知道如何使用python中的内置函数map,filter,reduce
-
操作流程:
""" 需求: 1, 将每个元素进行平方[1,2,3,4,5,6,7,8,9,10]输出 -> map 2, 将每个元素首字母大写输出["zhangsan","lisi","wangwu"] -> map 3, 求出列表中的偶数元素[1,...10] -> filter 4, 求出给定列表的元素和 -> from functools import reduce """"" #1, 1, 将每个元素进行平方[1,2,3,4,5,6,7,8,9,10]输出 def square(x): return x * x result = map(square,[i for i in range(1,11)]) print(list(result)) # 2, 将每个元素首字母大写输出["zhangsan","lisi","wangwu"] def tranfer_up(x): return x.capitalize() result2 = map(tranfer_up,["zhangsan","lisi","wangwu"]) print(list(result2)) # 3, 求出列表中的偶数元素[1,...10] def number_filter(x): return x % 2 == 0 result3 = filter(number_filter,[i for i in range(1,11)]) print(list(result3)) #4, 求出给定列表的元素和, [1,2,3,4,5,6,7,8,9,10] from functools import reduce def sum(num1,num2): return num1 + num2 result4 = reduce(sum,[i for i in range(1,11)]) print(result4)
12, 学生管理系统(小练习)
-
目的: 写出学生管理系统
-
操作流程:
""" 需求说明: 1, 菜单功能 a, 添加学生 b, 删除学生 c, 修改学生 d, 查询学生 e, 显示所有学生 f, 退出程序 2, 使用函数的形式实现对应的功能 """"" stu_list = [] # 定义全局变量,用来存储学生信息 #1, 菜单展示 def show_meanu(): print("==================学生管理系统======================") print("1 - 添加学生") print("2 - 删除学生") print("3 - 修改学生") print("4 - 查询学生") print("5 - 显示所有学生") print("6 - 退出程序") #2, 添加学生 def add_stu(): #1,请输入学生姓名,年龄,手机号 name = input("请输入姓名:") age = input("请输入年龄:") phone = input("请输入手机号:") #2,将学生信息添加到字典 stu_dict = { "name":name, "age":age, "phone":phone, } #3,将学生字典添加到列表中 stu_list.append(stu_dict) #3,删除学生 def del_stu(): #1,请输入你要删除的学生学号 no = input("请输入你要删除的学生学号:") no = int(no) #2,判断学号是否存在 if no < 0 or no > len(stu_list) - 1: print("你输入的学号有误, 请重新输入") return #3,删除学生 stu_list.pop(no) #4,修改学生 def update_stu(): # 1,请输入你要修改的学生学号 no = input("请输入你要修改的学生学号:") no = int(no) # 2,判断学号是否存在 if no < 0 or no > len(stu_list) - 1: print("你输入的学号有误, 请重新输入") return # 3,修改学生 new_name = input("请输入新的姓名:") new_age = input("请输入新的年龄:") new_phone = input("请输入新的手机号:") stu_list[no]["name"] = new_name stu_list[no]["age"] = new_age stu_list[no]["phone"] = new_phone # 5,修改学生信息 def find_stu(): #1,请输入你要查询的学生姓名 name = input("请输入你要查询的学生姓名:") #2,查询 exist = False for stu in stu_list: if name in stu.values(): print("你要查找的学生信息,学号,姓名,年龄,手机号分别是,{},{},{},{}". format(stu_list.index(stu),stu["name"],stu["age"],stu["phone"])) exist = True break #3,判断是否找到了 if exist == False: print("你要查找的{}不存在".format(name)) #显示所有学生 def show_stus(): #1,输出排头信息 print("学号\t姓名\t年龄\t手机号") #2,遍历所有学生信息 for stu in stu_list: print(f"{stu_list.index(stu)}\t{stu['name']}\t{stu['age']}\t{stu['phone']}") def main(): """入口程序""" while True: #1,展示菜单 show_meanu() #2,提示用户选择 choice = input("请输入你要执行的操作:") #3,判断用户选择 if choice == "1": add_stu() elif choice == "2": del_stu() elif choice == "3": update_stu() elif choice == "4": find_stu() elif choice == "5": show_stus() elif choice == "6": print("退出学生管理系统") exit(0) # 正常退出程序, break else: print("选择的操作有误, 请重新选择!!!") main()
总结
1, 函数作用, 代码复用, 方便维护
2, 函数定义, def 函数名(参数: int = 10) -> 类型: return 返回值
3, 函数参数, 缺省值, 不定长*args, **kwargs
4, 函数嵌套, 函数内部调用其他函数
5, 局部变量,全局变量, 局部变量, global 变量名
6, 变量引用, 数值引用,不可变(数字,字符串,元祖), 地址引用,可变(列表,字典)