函数三要素:
名字 参数 返回值
区别:
#函数三要素:名字 参数 返回值
#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.3
return heights
predict_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 全局变量