1第七章python函数进阶*

函数的多返回值(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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值