函数进阶
函数基础回顾
通用定义格式
def 函数名(形参):
函数体
return 返回值
通用调用格式
变量接收返回值 = 函数名(实参)
注意事项:
1.先定义再调用
2.每调用一次就执行一次
3.不调用不执行
4.如果有形参,调用的时候必须传入实参
5.如果有返回值,调用的时候建议用变量接收返回值
6.没有返回值,默认返回是None(空的没有意义)
函数的多个返回值
知识点:
return 返回值: return 结束并瑞出当前函数,顺带把后面的返回值返回给调用者
return 值1,值2: return 后跟多个返回值,默认放到元组中返回此元组
示例:
#知识点:函数返回多个值,核心思想放到容器中返回,默认用的元组
#先定义函数
def show():
return 1,2,3
#再调用函数
#方式1:接收有元组,再遍历
result = show()
print(result,type(result))
#遍历元组
for i in result:
print(i)
#方式2:直接拆包接收
a,b,c =show()
print(a,b,c)
函数参数分类
知识点:
形参: 定义函数的时候,括号中内容
位置参数,缺省参数,可变参数
实参: 调用函数的时候,括号中内容
位置参数传参,关键字参数传参
特点:
位置参数: 顺序必须一致,个数必须一致
关键字参数: 顺序可以不一致
位置参数: 个数可以不一致
可变参数: 传入的实参个数可以不定长,*args以元组形式接收数据,**kwargs以字典方式接收数据
位置参数示例:
#先定义函数
def show(name,age,height):
print(f"姓名:{name},年龄:{age},身高:{height}cm")
#再调用函数
#演示位置参数,弊端:实参和形参的个数和顺序都必须一致
show('张三',18,178.8)
关键字参数示例:
#先定义函数
def show(name,age,height):
print(f"姓名:{name},年龄:{age},身高:{height}cm")
#再调用函数
#演示关键字参数,优点:实参和形参的顺序可以不一致 弊端:实参和形参的个数必须一致
show(age=18,name='张三',height=178.8)
#注意:如果关键字参数和位置参数一起使用,关键字参数需要放到后面
show('张三',height=178.8,age=18)
缺省参数示例:
#先定义函数
def show(name='张三',age=18,height=188.8):
print(f"姓名:{name},年龄:{age},身高:{height}cm")
#再调用函数
#演示关键字参数,优点:实参和形参的个数可以不一致
#如果都设置了缺省参数,调用的时候可以都不传,使用默认值
show()
#如果都设置了缺省参数,调用的时候传入了值,以传入的为主
show('李四')
show('李四',19)
show('李四',19,199.9)
#注意:如果定义的时候都设置了缺省参数,调用的时候只想改变后面的某个数据,需要用关键字参数
show(name='张三',height=199.9)
可变参数示例:
"""
可变参数:不定长参数
位置传参:一个个数据,使用*args接收,默认把所有数据存储到元组中,这个元组名叫args
关键字传参:一对对数据,使用**kwargs,默认把所有数据存储到字典中,这个字典吗叫kwargs
"""
#先定义函数
def show1(*args,**kwargs):
print(args,type(args))
print(kwargs,type(kwargs))
#再调用函数
show1(1,2,3,a=4,b=5,c=6)
综合练习
#需求:定义一个求和的函数
#先定义函数
def get_sum(*args,**kwargs):
print(args)
print(kwargs)
sum = 0
#遍历元组
for i in args:
sum += i
#遍历字典的所有值
for i in kwargs.values():
sum += i
return sum
#再调用函数
print(get_sum(10,20,30,a =40,b=50,c=60))