4. Python 函数进阶(多返回值、多种传参方式、匿名函数)

1. 函数的多返回值

如果一个函数要有多个返回值,该如何书写代码?

def test_return():
    return 123, "hello", True
x, y, z = test_return()
print(x)
print(y)
print(z)

输出结果:

123
hello
True

按照返回值,写对应的多个变量接收即可。
支持同时返回不同类型的数据。

2. 函数的多种传参方式

2.1 位置参数

位置参数:调用函数时根据参数位置来传递参数。
注意:实参与形参的顺序及个数必须一致。

def user_info(name, age, gender):
	print(f'您的名字是{name},年龄是{age},性别是{gender}')
user_info('TOM', 20,'男')

2.2 关键字参数

关键字参数:函数调用时通过 “键=值” 的形式传递参数。
作用:可以让函数更加清晰、容易使用,同时也没有参数的顺序需求。

def user_info(name, age, gender):
    print(f"您的名字是:{name},年龄是:{age},性别是:{gender}")
#关键字传参
user_info(name="小明",age=20,gender="男")
#可以不按照固定顺序
user_info(age=20,gender="男",name="小明")
#可以和位置参数混用,位置参数必须在前,且匹配参数顺序
user_info("小明",age=20,gender="男")

注意:函数调用时,如果有位置参数,位置参数必须在关键字参数的前面,且要与形参对应,但关键字参数之间不存在先后顺序。

2.3 不定长参数

不定长参数:不定长参数也叫可变参数,用于不确定传参个数(不传参也可以)的场景。不定长参数的类型有:

① 位置传递
传进的所有参数都会被 args 变量收集,args 会根据顺序将传进的参数合并为一个元组(tuple)。

def user_info(*args):
    print(args)
user_info('TOM')
user_info('TOM', 18)

输出结果:

('TOM',)
('TOM', 18)

② 关键字传递
参数是 “键=值” 的形式,所有的 “键=值” 都会被 kwargs 接受,组成字典。(kw:key-word)

def user_info(**kwargs):
    print(kwargs)
user_info(name='TOM', age=18, id=110)

输出结果:

{'name': 'TOM', 'age': 18, 'id': 110}

2.4 默认参数(缺省参数)

默认参数:默认参数也叫缺省参数。如果传入该参数,就使用传入的参数;如果不传入,就使用默认值。
注意:默认参数必须在最后。

def user_info(name, age, gender='男'):
    print(f'您的名字是{name},年龄是{age},性别是{gender}')
user_info('TOM', 20)
user_info('Rose', 18, '女')

输出结果:

您的名字是TOM,年龄是20,性别是男
您的名字是Rose,年龄是18,性别是女

错误示例:
在这里插入图片描述

3. 匿名函数

3.1 函数作为参数传递

在前面,函数都是接收数据作为参数传入,如:数字、字符串、字典、列表、元组等。
其实,函数本身,也可以作为参数传入另一个函数内。

def test_func(compute):
    result = compute(1, 2)
    print(type(compute))
    print(result)

def compute(x,y):
    return x + y

test_func(compute)

输出结果:

<class 'function'>
3

这是计算逻辑的传递,而非数据的传递。

3.2 lambda 匿名函数

函数的定义中,def 关键字,可以定义带有名称的函数;lambda 关键字,可以定义匿名函数。

有名称的函数,可以基于名称重复使用;无名称的匿名函数,只可临时使用一次。

匿名函数定义语法

lambda 传入参数:函数体

lambda:关键字,表示定义匿名函数。
传入参数:匿名函数的形参,如:x, y表示接收 2 个形参。
函数体:函数的执行逻辑,只能写一行代码。如果代码超过一行,还是要用 def 定义带名函数。

传入 def 定义的函数与传入匿名函数的对比:

(1) 通过 def 关键字,定义一个函数,并传入:

def test_func(compute):
    result = compute(1, 2)
    print(result)
    
def compute(x,y):
    return x + y

test_func(compute)#结果:3

(2) 通过 lambda 关键字,传入 lambda 匿名函数:

def test_func(compute):
    result = compute(1, 2)
    print(result)
#lambda函数直接将x+y的结果return 
test_func(lambda x, y: x + y)#结果:3

使用 def 和 lambda,定义的函数功能完全一致,只是 lambda 关键字定义的函数是匿名的,无法二次使用。

若用一个变量接收了 lambda 函数,就可以多次使用该函数。

func = lambda x, y: x + y #func相当于函数名
print(func(1,3))#输出4
print(func(1,3))#输出4
print(func(1,3))#输出4
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值