微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

原文地址:https://www.jb51.cc/wenti/3281802.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐