python中函数定义是使用def进行定义,函数可以理解为 多个语句代码组成,用来实现单一或者相关功能的代码段,在程序中可以重复调用而无需编写重复代码。
1 def add(a,b): #定义一个函数 2 c = a+b 3 return c #返回值,如果没有return语句,则返回值为None
1、函数返回值
函数返回值使用return关键字,可以返回多个值,若没有return语句,则返回值为None
2、函数参数:形参、实参
形参为函数定义时使用的参数名,实参为具体调用时的参数名
1 def add(a,b): #a,b为形参 2 c = a+b 3 print(c) 4 return c 5 6 7 a1=3 8 b1=4 9 add(a1,b1) #a1,b1为实参
传递不可变的数据对象,若函数内进行重新赋值实参数据对象值不会被改变
1 def fun(a): 2 a=12 3 return a 4 5 b=1 6 print(fun(b)) #输出结果为12,参数b执行2,在传递给函数fun(b)时,按传值方式a复制b,因此a,b都指向2对象,在函数内a=12重新生成一个12对象,让a执行它 7 print(b) #输出结果为2
传递可变的数据对象,若函数内进行重新赋值实参数据对象值被改变
1 def fun(args): 2 args.insert(1,'5') #在第二个位置插入'5' 3 print(args) 4 5 list1 = [1,2,3,4,5,6] 6 fun(list1) 7 print(list1) #值被改变
3、默认参数、动态参数
若函数参数有默认值,则在调用时可以不传默认参数的值,此时使用默认值。当不清楚函数需要传输几个参数可以使用动态参数,一般分两种 :*args为元祖形式,**kwargs为字典形式
1 1 def add(a,b=3): 2 2 print(a+b) 3 3 4 4 add(2) #结果为5,此时b使用默认参数3 5 5 add(2,5) #结果为7,此时b使用传输参数值5
当函数同时存在必须参数、默认参数、*args、**kwargs参数时参数顺序如下:Python3参数顺序:必选参数,默认参数,*args,**kwargs
1 def add(x,z=11,*args,**kwargs): 2 print(x) 3 print(z) 4 print(args) 5 print(kwargs) 6 7 8 9 add(1,2,3,4,y=5,a=6,b=7) #结果为7,此时b使用传输参数值5
执行结果:
1 1 2 2 3 (3, 4) 4 {'y': 5, 'a': 6, 'b': 7}
4、局部变量和全局变量
局部变量参数只能在函数内起作用,全局变量可以在整个模块中可以调用
1 user = 'admin' #全局变量 2 3 def login(): 4 user = 'admin11' #局部变量 5 print(user) 6 7 def info(): 8 global user 9 user = 'admin22' 10 print(user) 11 12 13 login() #结果为admin11 14 print(user) #结果为admin 15 info() #结果为admin22 16 print(user) #结果为admin22
当函数内局部变量名与全局变量名一致时,优先使用局部变量
5、lambda函数
python中使用lambda创建匿名函数,所谓匿名即不使用def定义标准的函数,它是一个简单的表达式。lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
语法如下:
lambda [arg1[, arg2, ... argN]]: expression
参数是可选的,如果使用的参数话,参数通常也是表达式的一部分
1 1 add1 = lambda a,b:a+b #:a、b左侧为参数,右侧a+b为表达式且是返回之 2 2 print(add1(4,5))
6、函数实战
6..实现学生管理系统,完成对学员的增,删,改,查和退出学生管理系统。
要求1:使用一个list用于保存学生的姓名。
要求2:输入0显示所有学员信息,1代表增加,2代表删除,3代表修改,4代表查询,exit代表退出学生管理系统。每一个功能定义一个自定义函数。界面如下:
系统界面如下:
-----------------------欢迎进入T666班学生管理系统-----------------------------
请选择系统功能:
0:显示所有学员信息
1:添加一个学员信息
2:删除一个学员信息
3:修改一个学员信息
4:查询一个学员信息
exit:退出学生管理系统
(0)输入0后效果如下:
0
["郭易","汤碗珍"..]
(1)输入1后效果如下:
1
请输入增加人的姓名:张三
["郭易","汤碗珍",'张三'..]
(2)输入2后效果如下:
2
请输入删除人的姓名:张三
["郭易","汤碗珍"..]
(3)输入3后效果如下:<注意:如果list中没有这个学员则打印:T666班没有这个学员>
3
请输入需要修改人的姓名:张三
请输入需要修改后的姓名:李四
["郭易","汤碗珍",'李四'..]
4)输入4后效果如下:<注意:如果list中没有这个学员则打印:T666班没有这个学员>
请输入查询人的姓名:张三
郭易在座位号(3<下标>)的位置。
(5)输入exit后效果如下:
exit
欢迎使用T666的学生管理系统,下次再见。
1 def questudent(slist): 2 print(slist) 3 print(" ") 4 5 def addstudent(slist): 6 adds = str(input("请输入增加人的姓名:")) 7 for s in slist: 8 if s == adds: 9 print('添加的学员名已存在') 10 break 11 else: 12 slist.append(adds) 13 print(slist) 14 print(" ") 15 16 def delstudent(slist): 17 dels = str(input("请输入删除人的姓名:")) 18 for s in slist: 19 if s == dels: 20 slist.remove(dels) 21 break 22 else: 23 print("删除人的姓名不存在") 24 print(slist) 25 print(" ") 26 27 28 def upstudent(slist): 29 ups = str(input("请输入需要修改人的姓名:")) 30 upsn = str(input("请输入需要修改后的姓名:")) 31 slen = len(slist) 32 for i in range(slen): 33 if slist[i] == ups: 34 slist[i] = upsn 35 print(slist) 36 break 37 else: 38 print("T666班没有这个学员") 39 print(" ") 40 41 def questudentnum(slist): 42 ques = str(input("请输入查询人的姓名:")) 43 slen = len(slist) 44 for i in range(slen): 45 if slist[i] == ques: 46 print("{0}在座位号{1}的位置".format(ques,i)) 47 print(" ") 48 49 50 def main(): 51 slist = ["郭易","汤碗珍"] 52 while True: 53 choice = input('请选择系统功能: 0:显示所有学员信息 1:添加一个学员信息 2:删除一个学员信息 3:修改一个学员信息 4:查询一个学员信息 exit:退出学生管理系统 请输入序号:') 54 if choice == '0': 55 questudent(slist) 56 elif choice == '1': 57 addstudent(slist) 58 elif choice == '2': 59 delstudent(slist) 60 elif choice == '3': 61 upstudent(slist) 62 elif choice == '4': 63 questudentnum(slist) 64 elif choice == 'exit': 65 print("欢迎使用T666的学生管理系统,下次再见") 66 exit() 67 else: 68 print("输入数据不符") 69 continue 70 71 if __name__ == '__main__': 72 main()