函数三要素:
名字 参数 返回值
区别:
#函数三要素:名字 参数 返回值#dockstring 函数体内的说明def bmi(height,weight):'''计算BMI的值:公式:身高/(体重*体重).身高是以米为单位,如1.78体重是以千克为单位,如70千克函数返回计算好的BMI值,保留两位小数'''val = weight/(height*height)return round(val,2)#print(bmi(1.75,70))#print(bmi.__doc__)#1.位置参数#基于位置的参数 - 适合少参数情况def calc(a,b,c):print(a*a + 2*b + c)#calc(3,5,8)#2.关键词参数#可能出现位置传错情况 - 指定位置#calc(c=8,a=3,b=5)#3.混搭 位置参数在前,先位置,后关键词#calc(3,c=8,b=5)#4.强制关键词参数# * 之后的参数必须用关键词传参数#强制传参可以和位置传参混搭def c2(d,*,a,b,c):print(a*a + 2*b + c)#c2(3,5,8)c2(0,a=3,b=5,c=8)#5.默认参数#非默认参数不能放在默认参数之后#先非默认参数,再默认参数def c3(a,b=5,c=8):print(a*a + 2*b + c)c3(3)#6.可变(位置)参数#先固定参数,再可变参数# *变量名 表示可变参数#元组前加* 对其开包,将其破开def hello(msg,*names):print('Hello',names,msg)#hello('新年好','zhangsan','lisi','wangwu','zhaoliu')#7.可变(关键词)参数def hello2(msg,**names):print('老大是',names['BOSS'],msg)print('老二是',names['BOSS2'],msg)hello2('新年好',BOSS='张三',BOSS2='李四',GUARD='王五')#8.进一步混搭#顺序必须是:必选参数、默认参数、可变位置参数、命名关键词参数、可变位置参数def f(a,b,c,d,*args,e,f,**kwargs):print(a,b,c,d,e,f)print(args)print(kwargs)f(1,2,3,4,5,99,e=6,f=7,x=8,y=9,z=10)#9.强制位置参数 - 只能通过位置传参,不能通过参数传参# / 之前的为强制位置参数def f2(a,b,/,c,d,*,e,f,**kwargs):print(a,b,c,d,e,f)f2(3,4,5,6,e=7,f=8,z=9,w=10)#10.函数调用 - 开包列表和元组#开包def hello3(msg,name1,name2,name3):print('Hello',name1,name2,name3,msg)names = ['张三','李四','王五']hello3('你好',names[0],names[1],names[2])hello3('你好',*names)#开包-打包-开包def hello4(msg,*names):print('hello',*names,msg)name_param = ['张三','李四','王五']hello4('你好',*name_param)#11.函数调用-开包字典# ** 开包def hello5(msg,**names):print('老大是',names['BOSS'],msg)print('老二是',names['BOSS2'],msg)data = {'BOSS':'张三','BOSS2':'李四','GUARD':'王五'}hello5('新年好',BOSS=data['BOSS'],BOSS2=data['BOSS2'],GUARD=data['GUARD'])hello5('新年好',**data)
#1.可以有返回值,也可以没有返回none#2.返回值通过return返回#3.遇到return,函数执行结束#4.返回多个值,def send_flower(flower_num):if(flower_num < 10):return '今天有时,以后再联系'if(flower_num % 14 == 0):return '今天有时间吗?晚上一起吃个饭'else:return '谢谢你!'#print(send_flower(28))#传值VS引用#基本类型是传值,不影响原来的数值#复杂类型传引用,修改原来数值heights = [1.67,1.78,1.59]def predict(heights):for index,h in enumerate(heights):heights[index] = h + 0.3return heightspredict_heights = predict(heights)#print(heights)#函数可以被赋值,可以被传递#匿名函数#对于一行可以写出来的,一次性使用的函数#1、没有名称的一行的函数#2.不用def,也可以被复制numbers = [2,4,5,6,7,3]def process(numbers,calc):for n in numbers:print(calc(n),end=' ')print( )# def add5(n):# return(n+5)# def double(n):# return(n+n)process(numbers,lambda x:x+5)process(numbers,lambda x:x*5)#global 全局变量
