Python之lambda表达式

文章详细介绍了Python中的lambda函数,包括其作用、语法、参数形式(无参数、位置参数、默认参数、可变参数、关键字参数)以及应用场景,如简化代码和内存优化。通过示例展示了如何使用lambda进行三目表达式操作和对元素为字典的列表按key值排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、作用

如果函数有一个返回值,并且只有一句代码,那么我们就可以使用lambda进行简化,并且使用lambda可以更加节省内存空间

2、语法

lambda 参数列表: 表达式

注意:

  • lambda表达式的参数可有可无,函数的参数在lambda表达式中完全适用
  • lambda函数能接收任何数量的参数,但只能返回一个表达式的值
  • 直接打印lambda表达式,输出的是此lambda的地址值
def fun1():
    return 66


print(fun1())  # 输出:66

fun2 = lambda: 66
print(fun2)  # 输出:<function <lambda> at 0x000001E3AD927160>
print(fun2())  # 输出:66

3、lambda的参数形式

我们在上面已经说过,函数的参数在lambda中也完全适用,接下来我们逐一介绍

3.1、无参数

print(lambda: 100)              # 输出:<function <lambda> at 0x000001A070B563A0>
print((lambda: 100))            # 输出:<function <lambda> at 0x000001A070B563A0>
print((lambda: 100)())          # 输出:100

3.1拓展:lambda参数的调用

接下来我们再看下面的代码

def fun1():
    return 66

a = fun1
print(a)            # 输出:<function fun1 at 0x000002227DD363A0>
print(fun1)         # 输出:<function fun1 at 0x000002227DD363A0>

我们发现,当我们不管是普通的函数还是lambda表达式,我们不加小括号它打印出来的都是这个函数的地址值,因此,如果我们想要得到函数的返回值的话,我们必须对整个lambda表达式后面加一个小括号,也可以将lamda表达式的地址给一个变量,然后将该变量视为函数名,后面再加一个小括号即可

3.2、位置参数

需求1:定义一个函数,依次传入两个整数a和b(保证b不为0),求a和b的余数
def getMod(a, b):
    return a % b


print(getMod(10, 3))               # 输出:1

print((lambda a, b: a % b)(0, 3))  # 输出:1
print((lambda a, b: a % b)(3, 0))  # 输出:ZeroDivisionError: integer division or modulo by zero

因此,在使用位置参数的时候,我们需要保证传入的数据和定义的形参的顺序相同,否则可能会得不到正确的结果,其次,我们也发现了lambda函数的确极大的化简了我们的代码,另外,我们可以发现,我们不需要使用函数名也能调用lambda函数,因此,lambda函数也叫做匿名函数

3.3、默认参数(缺省参数)

需求2:定义一个函数,传入的参数的个数可能是4个也可能是5个(使用默认参数的方式传递),返回它们的和
print((lambda a, b, c, d, e=0: a + b + c + d + e)(100, 200, 300, 400))          # 输出:1000
print((lambda a, b, c, d, e=0: a + b + c + d + e)(100, 200, 300, 400, 500))     # 输出:1500

3.4、可变参数

对于需求2,我们用可变参数可以更加简介

fun = lambda *args: sum(args)
print(fun(100, 200, 300, 400))          # 输出:1000
print(fun(100, 200, 300, 400, 500))     # 输出:1500

我们试着直接打印args试一下

print((lambda *args: args)(1))          # 输出:(1,)
print((lambda *args: args)(1, 2))       # 输出:(1, 2)
print((lambda *args: args)(1, 2, 3))    # 输出:(1, 2, 3)

可以发现,当可变参数传入lambda之后,返回的数据类型是元组类型

3.5、关键字参数

print((lambda **kwargs: kwargs)(name="Tom", age=19, gender="男"))    # 输出{'name': 'Tom', 'age': 19, 'gender': '男'}

3.6、注意

默认参数一定要在位置参数后面,可变参数一定在默认参数后面,关键字参数必须在可变参数后面

4、lambda的应用

4.1、三目表达式与lambda的运用

需求:定义一个lambda函数,返回两个数之间的最大值
getMax = lambda a, b: a if a > b else b
print(getMax(10, 20))       # 输出:20
print(getMax(40, 20))       # 输出:40

4.2、对元素为字典的列表按key值进行排序

students = [{"name": "Tom", "age": 18, "grade": 97},
            {"name": "John", "age": 19, "grade": 99},
            {"name": "Anxin", "age": 17, "grade": 95}]

# 按姓名升序排序
students.sort(key=lambda x: x["name"])
print(students)
# [{'name': 'Anxin', 'age': 17, 'grade': 95}, {'name': 'John', 'age': 19, 'grade': 99}, {'name': 'Tom', 'age': 18, 'grade': 97}]

# 按年龄升序排序
lst = sorted(students, key=lambda x: x["age"])
print(lst)
# [{'name': 'Anxin', 'age': 17, 'grade': 95}, {'name': 'Tom', 'age': 18, 'grade': 97}, {'name': 'John', 'age': 19, 'grade': 99}]

# 按成绩降序排序
students.sort(key=lambda x: x["grade"], reverse=True)
print(students)
# [{'name': 'John', 'age': 19, 'grade': 99}, {'name': 'Tom', 'age': 18, 'grade': 97}, {'name': 'Anxin', 'age': 17, 'grade': 95}]

5、总结

在语法中的表达式就是lambda函数的返回值,使用该表达式可以化简我们的代码,节省内存空间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值