1:定义函数
1 def printInfo(): 2 print("I love Python!") 3 4 #调用函数 5 #注意:函数定义完毕并不会被默认执行,只能通过调用的方式来让它执行 6 printInfo()
2:向函数传递信息:即参数
1 #求两个数的和 2 def sumNum(a,b): #这里的a,b为形式参数(形参) 3 print("%d"%(a+b)) 4 5 sumNum(10,20) #这里的10,20为实际传入的参数(实参)
3:位置实参/关键字实参:调用带有参数的函数时,可以指定参数的顺序
1 def myPet(petType, petName): 2 print("我的宠物是一只"+petType+", 它的名字是"+petName+".") 3 4 #以下两种调用方式输出的结果一样 5 myPet(petType = '小狗', petName = 'jenson') 6 myPet(petName = 'jenson', petType = '小狗')
4:带有返回值的函数
1 def sumNum(a,b): 2 return a+b 3 4 #调用函数,顺便保存函数的返回值,以便以后使用 5 result = sumNum(11,22) 6 print(result)
5:常见的四种函数类型
'''
无参数,无返回值(如上述1)
无参数,有返回值(如下)
有参数,无返回值(如上述2)
有参数,有返回值(如上述4)
'''
1 def getId(): 2 return 2001234 3 4 idNum = getId() 5 print("id = %d"%idNum)
6:函数的嵌套调用
1 def testA1(): 2 print("开始执行函数A1...") 3 4 def testA(): 5 print("开始执行函数A...") 6 testA1() 7 print("函数A执行结束.") 8 9 testA() 10 11 12 13 #函数嵌套调用实例:写一个函数求三个数的和,并求三个数的平均值 14 def getSum(a,b,c): 15 sum = a + b + c 16 return sum 17 18 def avgValue(A,B,C): 19 result = getSum(A,B,C) 20 average = result/3.0 21 return average 22 23 result = avgValue(20,30,40) 24 print("三个数的平均值是:%f"%result)
7:函数的局部变量和全局变量
'''
局部变量,就是在函数内部定义的变量
不同的函数,可以定义相同的名字的局部变量,但是各用各的不会产生影响
局部变量的作用,为了临时保存数据需要在函数中定义变量来进行存储,这就是它的作用
'''
1 def test1(): 2 a = 100 #这里的a就是局部变量,只在test1函数内起作用 3 4 def test2(): 5 print("a=%d"%a) #在test2中不能使用a 6 7 test1() 8 #test2() #报错 9 #print("a=%d"%a) #会报错 10 11 12 #如果一个变量既能在这个函数中使用也能在其他函数中使用,则这样的变量就是全局变量 13 a = 1000 #全局变量 14 def test1(): 15 print(a) 16 17 def test2(): 18 print(a) 19 20 test1() 21 test2() 22 23 #全局变量和局部变量名称可以相同 24 b = 1000 25 def testA2(): 26 b = 2000 #这里打印的b是局部变量 27 print(b) 28 29 def testA3(): 30 print(b) #这里打印的b是全局变量 31 32 testA2() 33 testA3() 34 35 36 37 #如果需要在函数中修改全局变量,那么就需要用global进行声明,否则会出错 38 c = 1000 39 def testB1(): 40 global c 41 print("修改前:c=%d"%c) 42 c = 2000 43 print("修改后:c=%d"%c) #这里打印的c的值已经发生变化 44 45 def testB2(): 46 print(c) #这里打印的c的值也将发生变化 47 48 testB1() 49 testB2()
练习一:计算1~指定数的和
1 #定义求和函数,有返回值 2 def getSum(num): 3 i = 1 4 sum = 0 5 while i<=num: 6 sum+=i 7 i+=1 8 9 return sum 10 11 #将返回值保存在一个变量中 12 result = getSum(1000) 13 print("-"*20) 14 print("求和结果是:%d"%result) 15 print("-"*20)
练习二:名片管理系统(第一版)
1 #主界面函数:没有参数没有返回值 2 def displayMenu(): 3 print("-"*30) 4 print(" 名片管理系统 V6.0") 5 print(" 1. 添加名片") 6 print(" 2. 删除名片") 7 print(" 3. 修改名片") 8 print(" 4. 查询名片") 9 print(" 5. 遍历名片") 10 print(" 6. 退出系统") 11 print("-"*30) 12 13 #获取用户输入的信息:没有参数,有返回值 14 def getChoice(): 15 selectedKey = int(input("请输入选择的序号:")) 16 return selectedKey 17 18 #有参数,没有返回值 19 def printAllInfo(nameListTemp): 20 print("="*20) 21 for temp in nameListTemp: 22 print(temp) 23 print("="*20) 24 25 nameList = [] 26 i = 0 27 while i<10: 28 29 #打印提示 30 displayMenu() 31 32 #等待用户选择 33 key = getChoice() 34 35 if key == 1: 36 print("您选择了名片添加功能") 37 newName = input("请输入姓名:") 38 nameList.append(newName) 39 elif key == 3: 40 pass 41 elif key == 4: 42 pass 43 elif key == 5: 44 printAllInfo(nameList) 45 elif key == 6: 46 break 47 else: 48 print("输入有误,请重新输入!") 49 50 i+=1
测试结果如下:
练习三:编写"学生管理系统"(第一版),初步要求如下:
'''
必须使用自定义函数,完成对程序的模块化
学生信心至少包含:姓名、年龄、学号,除此以外可以适当添加
必须完成的功能:添加、删除、修改、查询、遍历、退出
'''
1 #定义一个列表用来存储多个学生的信息 2 stuList = [] 3 4 #定义系统菜单显示函数 5 def displayMenu(): 6 #完成显示系统菜单的功能 7 print("*"*40) 8 print(" 学 生 管 理 系 统 V2.0") 9 print(" 1. 添加学生信息") 10 print(" 2. 删除学生信息") 11 print(" 3. 修改学生信息") 12 print(" 4. 查询学生信息") 13 print(" 5. 遍历学生信息") 14 print(" 6. 退出学生管理系统") 15 print("*"*40) 16 17 def addNewStu(tempStuList): 18 #完成添加学生信息的功能 19 name = input("请输入学生的姓名:") 20 stuId = input("请输入学生的学号:") 21 age = input("请输入学生的年龄:") 22 23 #定义一个字典用来存储每个学生的信息 24 stuDict = {} 25 stuDict['name'] = name 26 stuDict['stuId'] = stuId 27 stuDict['age'] = age 28 29 #将每个学生的信息添加到列表中 30 tempStuList.append(stuDict) 31 32 def delStu(): 33 #完成删除学生信息的功能 34 delNum = int(input("请输入你要删除的学生的编号:")) 35 del stuList[delNum] 36 37 def reviseStu(): 38 #完成修改学生信息的功能 39 reviseNum = int(input("请输入你要修改的学生的编号:")) 40 tempStuDict = stuList[reviseNum] 41 #输入要修改学生的信息 42 newName = input("请输入要修改后学生的姓名:") 43 newStuId = input("请输入要修改后学生的学号:") 44 newAge = input("请输入要修改后学生的年龄:") 45 tempStuDict['name'] = newName 46 tempStuDict['stuId'] = newStuId 47 tempStuDict['age'] = newAge 48 49 def inquireStu(): 50 #完成查询学生信息的功能 51 inquireNum = int(input("请输入你要查询的学生的编号:")) 52 inquireStuDict = stuList[inquireNum] 53 print("你所查询的学生的信息为:") 54 print("姓名: %s 学号: %s 年龄: %s"%(inquireStuDict['name'], inquireStuDict['stuId'], inquireStuDict['age'])) 55 56 def bianliStu(): 57 #完成遍历学生信息的功能 58 print("姓名 学号 年龄") 59 for tempStu in stuList: 60 print("%s %s %s"%(tempStu['name'], tempStu['stuId'], tempStu['age'])) 61 62 while True: 63 64 #提示用户选择功能 65 key = int(input("请输入你选择的功能序号:")) 66 print(" ") 67 68 if key == 1: 69 displayMenu() 70 addNewStu(stuList) 71 elif key == 2: 72 delStu() 73 elif key == 3: 74 reviseStu() 75 elif key == 4: 76 inquireStu() 77 elif key == 5: 78 bianliStu() 79 elif key == 6: 80 ssmu = input("亲,确实要退出吗?(y/n) ~~~~>_<~~~~") 81 if ssmu == 'y': 82 break 83 else: 84 print("输入有误,请重新输入!")
测试结果如下: