函数-函数基础操作
1.定义函数
1 #定义函数 2 #定义了一个输出一句话的函数 3 def mysun(): 4 print('太阳带给我们爱与温暖') 5 #特征:不调用不会执行 6 mysun() #调用函数 7 #输出结果:太阳带给我们爱与温暖 8 #查看函数的数据类型(函数的定义相当于变量赋值,函数名就是变量名) 9 print(type(mysun)) 10 #输出结果:<class 'function'> 11 print(mysun) #打印函数变量名得出函数名和它在内存中的位置 12 #输出结果:<function mysun at 0x000001F12F94D2F0>
2.带有参数的函数
1 #带有参数的函数 2 def printnum(maxnum): 3 var = 0 4 while var <= maxnum: 5 print(var) 6 var += 1 7 8 #printnum() 9 #输出结果:TypeError: printnum() missing 1 required positional argument: 'maxnum' 10 #翻译结果:类型错误: printnum()缺少一个必需的位置参数:'maxnum' 11 12 #输出0-10的数字 13 printnum(3) 14 ''' 15 输出结果: 16 1 17 2 18 3 19 ''' 20 #输出0-5的数字 21 printnum(5) 22 ''' 23 输出结果: 24 1 25 2 26 3 27 4 28 5 29 ''' 30 #上面三个输出例子,printnum()函数可以反复自定义参数输出 31 #形参:在定义函数的括号中声明的变量名就是形参,形式上的参数 32 #实参:在调用函数的括号中传入的就是实参,实际上的参数 33 #注意:实参将值传递给形参的过程,本质上就是变量赋值操作
3.定义带有参数的函数
1 #定义带有参数的函数 2 def eatfruit(xm,xh): 3 print('小明喜欢吃水果' + xm) 4 print('小红喜欢吃水果' + xh) 5 #调用函数 6 eatfruit('西瓜','榴莲') 7 #注意: 8 #1.实参传值给形参的时候按照位置编号传输的 9 #2.实参必须根据形参的个数进行传值(普通参数) 10 ''' 11 输出结果: 12 小明喜欢吃水果西瓜 13 小红喜欢吃水果榴莲 14 '''
4.参数的默认值
1 #参数的默认值 2 #定义一个函数 3 def buyPC(cpu = 'I5',memory = '4G',videocard = '970'): 4 print('CPU是'+ cpu) 5 print('内存是'+ memory) 6 print('显卡是' + videocard) 7 8 #调用函数 传入实参 -> 使用的是实参值 9 #buyPC('I7-7700K','16G','1080ti') 10 ''' 11 输出结果: 12 CPU是I7-7700K 13 内存是16G 14 显卡是1080ti 15 ''' 16 #调用函数 不传入实参 -> 使用的是形参的默认值 17 #buyPC() 18 ''' 19 输出结果: 20 CPU是I5 21 内存是4G 22 显卡是970 23 ''' 24 #调用函数 传入一个实参 25 buyPC('I5','16G') 26 ''' 27 输出结果: 28 CPU是I5 29 内存是16G 30 显卡是970 31 '''
5.定义函数,自定义参数的几个形态数据传入
1 #定义函数,自定义参数的几个形态数据传入 2 #定义一个人物角色,并且设置装备 3 def creatPerson(mz,xl,yf,wq,xz): 4 print('头上戴着'+ mz ) 5 print('脖子上挂着' + xl) 6 print('身上穿着' + yf) 7 print('手上拿着' + wq) 8 print('脚上穿着' + xz) 9 #调用函数(按参数名称传入实参) 10 #creatPerson('三级头','钻石项链','锁子甲','金丝大环刀','草鞋') 11 ''' 12 输出结果: 13 头上戴着三级头 14 脖子上挂着钻石项链 15 身上穿着锁子甲 16 手上拿着金丝大环刀 17 脚上穿着草鞋 18 ''' 19 #调用函数(出现顺序错误) 20 #creatPerson('钻石项链','锁子甲','金丝大环刀','草鞋','三级头') 21 ''' 22 输出结果: 23 头上戴着钻石项链 24 脖子上挂着锁子甲 25 身上穿着金丝大环刀 26 手上拿着草鞋 27 脚上穿着三级头 28 ''' 29 #调用函数(使用关键字参数) 30 creatPerson(xl = '钻石项链', wq = '金丝大环刀', yf = '锁子甲',xz = '草鞋',mz = '三级头') 31 ''' 32 输出结果: 33 头上戴着三级头 34 脖子上挂着钻石项链 35 身上穿着锁子甲 36 手上拿着金丝大环刀 37 脚上穿着草鞋 38 '''
6.定义一个函数(计算3个数值的和的函数)
1 #定义一个函数(计算3个数值的和的函数) 2 def getsum(no1,no2,no3): 3 result = no1 + no2 + no3 4 print(result) 5 #调用函数 6 getsum(5,7,9) 7 #输出结果:21
7.定义一个函数(计算任意个数值的和的函数,不限定参数的数量)
1 #定义一个函数(计算任意个数值的和的函数,不限定参数的数量) 2 def getsum(*allnum): 3 #声明一个累加和的变量 4 total = 0 5 #计算所有数值的和 6 for i in allnum: 7 total = total + i 8 #打印求和结果 9 print(total) 10 #调用函数 11 getsum(2,4,7,5,5,8,3,10) 12 #输出结果:44 13 getsum(2,4) 14 #输出结果:6
8.函数的注意事项
1 #函数的注意事项 2 #参数 a,b,c是固定数量,*d非固定数量 3 def getarg(a,b,c,*d): 4 print(a,b,c) 5 #输出结果:1 2 3 6 print(d) 7 #输出结果:(4, 5, 6, 7, 8, 9, 10) 8 #调用函数(1,2,3实参被a,b,c形参占据,乘下的实参实*d占据) 9 getarg(1,2,3,4,5,6,7,8,9,10) 10 ''' 11 输出结果: 12 1 2 3 13 (4, 5, 6, 7, 8, 9, 10) 14 '''
9. **person 关键字收集参数
1 # **person 关键字收集参数 2 def showinfo(**person): 3 #打印person接受的结果 4 print(person) 5 print('参与大会的人员有' , person.keys()) 6 print('他们的体重分别是',person.values()) 7 #调用函数 8 showinfo(ml = 90,xm = 120 ,xh = 98 ,xg = 145,gm = 90)#关键字参数 9 ''' 10 输出结果: 11 {'ml': 90, 'xm': 120, 'xh': 98, 'xg': 145, 'gm': 90} 12 参与大会的人员有 dict_keys(['ml', 'xm', 'xh', 'xg', 'gm']) 13 他们的体重分别是 dict_values([90, 120, 98, 145, 90]) 14 '''
10. **person 关键字收集参数,注意:固定形参占据关键字参数
1 # **person 关键字收集参数,注意:固定形参占据关键字参数 2 def showinfo(xh,**person): 3 #打印person接受的结果 4 print(person) 5 print('参与大会的人员有' , person.keys()) 6 print('他们的体重分别是',person.values()) 7 #调用函数 8 showinfo(ml = 90,xm = 120 ,xh = 98 ,xg = 145)#关键字参数 9 ''' 10 输出结果: 11 {'ml': 90, 'xm': 120, 'xg': 145} 12 参与大会的人员有 dict_keys(['ml', 'xm', 'xg']) 13 他们的体重分别是 dict_values([90, 120, 145]) 14 '''
11.多种参数混合存在的情况
1 #多种参数混合存在的情况 2 #形参:普通形参 var ,收集参数 *var, 关键字收集参数 **var 3 #实参: 普通实参 99 ,关键字参数 var = 99 4 #定义一个测试使用的函数 5 def testargs(name,sex,age,*size,**goodfriends): 6 #使用普通参数 7 print(name,sex,age) 8 #使用收集参数 9 print(size) 10 #使用关键字收集参数 11 print(goodfriends) 12 #调用函数 13 testargs('小明','男',18,178,125,35,gf1 = '小刚',gf2 = '小欧',gf3 = '小红') 14 #实参:普通实参在前,关键字参数在后 15 ''' 16 输出结果: 17 小明 男 18 18 (178, 125, 35) 19 {'gf1': '小刚', 'gf2': '小欧', 'gf3': '小红'} 20 '''
12.函数的返回值 return ,返回函数的结果
1 #函数的返回值 return ,返回函数的结果 2 #没有返回值的函数调用时是运行整个函数的过程 3 def getsum(no1,no2): 4 result = no1 + no2 5 #print(result) 6 #返回值语句 7 return result 8 #调用函数 9 num = getsum(12,23) 10 print(num) 11 #输出结果:35 12 #将求和的结果进行乘以10的操作 13 print(num * 10) 14 #输出结果:350
13.查看return语句的另外一个作用
1 #查看return语句的另外一个作用 2 def test(): 3 print('************') 4 #添加return语句 5 return 6 print('############') 7 8 #调用函数 9 test() 10 #输出结果:************
14.变量的作用域
1 #变量的作用域 2 #声明一个全局变量(不完全正确) 3 mzj = '全身麻醉剂' 4 #声明一个函数(产生一个局部环境) 5 def zui(): 6 #在函数中打印mzj变量 7 print('在函数内部调用变量mzj',mzj) 8 print('在嘴巴里面拔牙') 9 #1.正在的环境(函数外部)中是否可以使用 ->变量有效 10 print('在函数外部调用变量mzj',mzj) 11 #2.在局部环境中检测变量是否有效 -> 变量有效 12 zui() 13 ''' 14 输出结果: 15 在函数外部调用变量mzj 全身麻醉剂 16 在函数内部调用变量mzj 全身麻醉剂 17 在嘴巴里面拔牙 18 '''
15.变量的作用域-局部变量
1 #变量的作用域-局部变量 2 def zui():#定义一个函数相当于局部环境 3 #定义局部变量 4 mzj = '局部麻醉剂' 5 #调用局部变量 6 print('在局部环境中调用变量mzj',mzj) 7 print('在嘴巴中拔牙') 8 zui() 9 ''' 10 输出结果: 11 在局部环境中调用变量mzj 局部麻醉剂 12 在嘴巴中拔牙 13 ''' 14 #在函数外部调用变量看看是否可以使用 -> 不可以访问 15 #print(mzj) 16 #输出结果:name错误:没有定义名称“mzj”
16.将局部变量提升为全局变量
1 #将局部变量提升为全局变量 2 def zui(): 3 #提升局部变量为全局变量 4 global mzj 5 #定义局部变量mzj 6 mzj = '麻醉剂' 7 #在局部环境中调用mzj 8 print('局部环境中调用变量',mzj) 9 #1.测试函数内部调用 10 zui() 11 #输出结果:局部环境中调用变量 麻醉剂 12 #2.测是外部环境调用 13 print('在函数外部调用变量',mzj) 14 #输出结果:在函数外部调用变量 麻醉剂
17.函数的运行顺序,和全局变量在作用域
1 #函数的运行顺序,和全局变量在作用域 2 leader = '主席' 3 #定义一个省 4 def shandong(): 5 print('此处是山东省') 6 print(leader) 7 #定义一个市 8 def jinan(): 9 print('此处是济南市') 10 print(leader) 11 #定义一个区域 12 def huaiyin(): 13 print('此处是槐荫区') 14 print(leader) 15 #调用槐荫区 16 huaiyin() 17 #调用济南函数(必须在山东的函数内) 18 jinan() 19 #调用山东函数 20 shandong() 21 ''' 22 输出结果: 23 此处是山东省 24 主席 25 此处是济南市 26 主席 27 此处是槐荫区 28 主席 29 '''
18.nonlocal 定义变量
1 # nonlocal 定义变量 2 def outer(): 3 #定义一个变量 4 var = 55 5 #定义一个内部函数 6 def inner(): 7 #声明外部变量 8 nonlocal var#当前变量var 不是全局变量也不是局部变量 9 #在此处使用outer内部定义的var变量 10 #在此处进行 +1 操作 11 var = var + 1 12 print(var) 13 #调用inner函数 14 inner() 15 #调用outer函数 16 outer() 17 #输出结果:56
19.函数中的变量 【使用列表的穿透效果】
1 #函数中的变量 【使用列表的穿透效果】 2 def outer(): 3 #定义一个变量(使用列表) 4 var = [55] 5 #定义一个内部函数 6 def inner(): 7 #在此处使用outer内部定义的var变量 8 #在此处进行 +1 操作 9 var[0] = var[0] + 10 10 print(var[0]) 11 #调用inner函数 12 inner() 13 #调用outer函数 14 outer() 15 #输出结果:65
20.lambda表达式
1 #lambda表达式 2 getsum2 = lambda no1,no2 : no1 + no2 #lambda表达式自带return 3 #调用lambda表达式(函数) 4 var = getsum2(33,55) 5 print(var) 6 #输出结果:88
21.带有分支结构的lambda表达式
1 #带有分支结构的lambda表达式 2 #普通函数的分支结构 3 def getsex(sex): 4 #检测性别返回单词 5 if sex == '男': 6 return 'man' 7 else: 8 return 'woman' 9 #调用函数~ 10 result = getsex('女') 11 print(result) 12 #输出结果:woman 13 14 #带有分支结构的lambda表达式 15 getsex2 = lambda sex : 'man' if sex == '男' else 'woman' 16 #调用函数 17 result = getsex2('女') 18 print(result) 19 #输出结果:woman
22.在lambda表达式中调用它其他函数
1 #在lambda表达式中调用它其他函数 2 #获取并且打印数据类型的函数 print(type(数据)) 3 printtype = lambda var : print(type(var)) 4 #调用函数 5 printtype('小明') 6 #输出结果:<class 'str'>