函数的多返回值(c等只支持单返回值)

def test_return():
return 1,2,3
x,y,z=1,2,"3"
print(x) # 1
print(y) # 2
print(z) # "3"
函数多种传参方式
位置参数

关键字参数

缺省参数
'''
函数的形式参数可以有默认值:
当调用函数不传递这个形式参数,则使用默认值
如果传递,则以传递值为主
'''
def user_info(name,age,gender='男'):
print(f"我是{name},今年{age}岁,性别{gender}")
# 默认值可以为多个参数设置(数量不限)
def user_info2(name,age=18,gender='男'):
print(f"我是{name},今年{age}岁,性别{gender}")
# 默认值参数必须在五默认值参数右侧(同关键字参数一样,必须右侧满)
''' error
def user_info3(name='小白',age,gender='男'):
print(f"我是{name},今年{age}岁,性别{gender}")
'''
# 这种调用在参数传递时候等于是:
# name=“小王”---》我们传的
# age=21---》我们传的
# gender="男"---》自带的
user_info('老王',21)
不定长参数*

位置传递

def func(name,*xxx):
'''
*是不定长参数标记,表示收集全部参数到元组
'''
print(f"我们是{name},我们的成员有:")
for i in xxx:
print(i)
'''
注意:语法上支持下列函数参数传递写法,在实际调用的时候需要通过关键字传参给age提供值
否则,全部参数都被xxx收集
'''
def func2(name,*xxx,age):
'''
*是不定长参数标记,表示收集全部参数到元组
'''
print(f"我们是{name},我们的成员有:")
for i in xxx:
print(i)
print(age)
func('黑马天团',"周杰伦","王力宏")
func('黑马天团',"周杰伦","王力宏","刘德华")
# func("周杰伦","王力宏","刘德华",name="黑马天团") error,因为name='周杰伦'了
#func2('黑马天团',"周杰伦","王力宏","刘德华",11) error,11被当作xxx内容,age没传
func2('黑马天团',"周杰伦","王力宏","刘德华",age=11)
关键字传递(就是键值对)

def func(name,**kwargs):
'''
**kwaargs 是<class 'dict'>,即全部关键字传参被收集到字典内
'''
print(kwargs)
# 本质上我们传递的就是kv键值对,被收集到kwargs这个字典内
func('小白',id=1,age=11,gender="女",addr="十方大山")
# {'id': 1, 'age': 11, 'gender': '女', 'addr': '十方大山'}
def func2(name,age,*args,**kwargs):
print(f"元组收集:{args}")
print(f"字典收集:{kwargs}")
func2('周杰伦',11,1,2,3,4,5,6,id=1,addr=2,gender=3)
# 元组收集:(1, 2, 3, 4, 5, 6)
# 字典收集:{'id': 1, 'addr': 2, 'gender': 3}
函数传参练习

def func(name,age,*args,**kwargs):
print(f"我是{name},年龄{age}岁,我的爱好有:",end="")
for i in args:
print(i,end=" ")
print()
print(f"我的其他信息:",end="")
# kargs.items():同时获取键和值,避免单独访问字典元素
kwargs_list=(f"{key}:{value}" for key,value in kwargs.items())
# 分隔符.join(元组/列表):将元组/列表元素合成一个字符串
print("、".join(kwargs_list))
func("小白",1000,"玩","张小凡",addr="十万大山",id=123,money=000)
匿名函数*
函数作为参数传递

'''
写参数时候:
形式参数,可以接收函数传入
实际参数,真的可以传入一个函数
这种写法称之为函数式编程,核心思想是:传入的是计算逻辑
'''
def func(compute):
# 被计算数据固定为1 and 2,要计算的逻辑取决于传入的compute函数
result=compute(1,2)
print(result) # -1
def compute(x,y):
return x-y
# 传入的是compute函数,而非变量和数据
# 传的是函数也是传的计算逻辑
func(compute)
lambda匿名函数

def func(compute):
# 被计算数据固定为1 and 2,要计算的逻辑取决于传入的compute函数
result=compute(1,2)
print(result)
# 调用func 4次,完成加减乘除
# 这些函数仅用一次,不用于重复使用
func(lambda x,y:x+y) # 3
func(lambda x,y:x-y) # -1
func(lambda x,y:x*y) # 2
func(lambda x,y:x/y) # 0.5
# lambda重复利用可以将其存入变量中
# 这个变量就是一个带名字的函数(很少用)
chengfa=lambda x,y:x*y