python lambda 匿名函数 用法

本文深入探讨了Python中lambda函数的应用,解析其语法结构与匿名特性,通过与reduce、map及filter函数的组合使用,展示了其在简化代码与提高效率方面的强大能力。

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

缘由

lambda这个关键字来自于LISP语言中一个类似的lambda calculus工具。同def创建一个之后能调用的函数,但不同点是lambda返回函数,def赋值一个变量名。由于没有函数的变量名,所有lambda被叫做匿名函数

表达式

Lambda arrgument1, argument2,..., argumentN : expression using arguments
In [1]: f = lambda x, y: x+y
In [2]: f(2,3)
Out[2]: 5

结构特点:lambda主体是一个单个表达式,而不是一个代码块。
结构简单得如同只有return主体的def一样。但是lambda能够出现在def不允许出现的地方,比如列表常量或者函数调用的参数中。

为什么使用lambda

简单来说就是为简化单行代码函数,一般只会调用一次的函数,可以省去编写函数名。

In [3]: L =[lambda x:x**2, lambda x:x**3, lambda x:x**4]
In [4]: for f in L:
   ...:     print(f(2))
   ...:
4
8
16

与迭代函数组合

可迭代函数就是一种有循环迭代功能的内置函数, 包括reduce 、map 和filter 等。在每个可迭代函数中都需要指定一个处理函数, 习惯上使用匿名函数作为处理函数。

与reduce函数组合

reduce本质可看作一个内嵌循环的函数

reduce(function, sequence, [initial])

function: 回调函数
sequence:一个“序列”类型的数据
按照sequence序列中元素顺序,依次调用函数function。每次调用传入两个参数:一个是sequence序列中当前元素,另一个是sequence序列中上一个元素在function中的返回值。

In [5]: from functools import reduce
In [6]: print(reduce(lambda x, y: x+y, range(1, 101)))
5050

与map函数组合

map(function, sequence)

function: 回调函数
sequence:一个“序列”类型的数据
将参数sequence内部的元素作为参数,按照sequence序列的顺序,以此调用回调函数function

In [7]: t = map(lambda x:x**2, [1,2,3,4,5])
In [9]: print(list(t))
[1, 4, 9, 16, 25]

多个sequence时,对应lambda中的参数个数

In [11]: t =  map(lambda x,y: x+y, [1 , 2, 3, 4, 5], [ 2, 4, 5, 6, 7])
In [12]: print(list(t))
[3, 6, 8, 10, 12]

与filter函数组合

filter 函数的功能是对指定序列进行过滤

filter(function or None, sequence)

function: filter的处理函数,返回布尔型,表示sequnce是否保留
sequence: 一个或多个待过滤的序列

In [14]: t=filter (lambda  x:x%2==0, [1, 2 , 3, 4, 5, 6, 7, 8, 9,10])
In [15]: print(list(t))
[2, 4, 6, 8, 10]

参考

《python 学习手册》19和20章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值