python基础-lambda表达式

lambda表达式

一、定义

lambda 表达式(有时称为 lambda 构型)被用于创建匿名函数。 表达式 lambda parameters: expression 会产生一个函数对象 。 该未命名对象的行为类似于用以下方式定义的函数:

def <lambda>(parameters):
    return expression

二、用法

2.1 用来编写简单的函数

  • 单个参数
>>> f = lambda x: x*2
>>> f(2)
4
  • 多个参数
>>> g = lambda x,y=2,z=3: x+y+z
>>> g(3,5,8)
16
  • lambda中实现if-else(三元运算、三目运算、条件表达式)

eg:输出两个数中较大的数

>>> upper = lambda x,y:x if x>y else y
>>> upper(3,8)
8

2.2 捕获变量值的原理

lambda表达式中的参数是一个自由变量, 在运行时绑定值,而不是定义时就绑定。

eg:

>>> x=10
>>> f = lambda y: x+y
>>> x=20
>>> g = lambda y: x+y
>>> f(15)       #执行这一步时绑定值,x=20
35
>>> g(15)
35

如果想让lambda函数在定义时就绑定到值,可以将参数值定义成默认参数。

>>> x=10
>>> f = lambda y,x=x: x+y         #定义成默认参数的参数要放后面,不然会报错SyntaxError
>>> x=20
>>> g = lambda y,x=x: x+y
>>> f(15)
25
>>> g(15)
35

2.3 与map、filter、reduce函数结合使用

  • map(func,seq)

    将函数func应用于seq的每个元素。python3中返回一个迭代器。

    eg1:将一个列表里的每个元素乘以2

    >>> l = [3,5,6,7,9]
    >>> list(map(lambda x: x*2,l))
    [6, 10, 12, 14, 18]
    

    eg2:可以给map函数传入多个序列参数,func函数的参数值会依次从并行的序列中拿

    >>> a = [4,10]
    >>> b = [15,8]
    >>> list(map(lambda x,y: x+y,a,b))
    [19, 18]    #依次取4+15=19,10+8=18
    
  • filter(func,seq)

    过滤序列中的所有元素,返回那些传入func后返回True的元素。也就是说filter函数的第一个参数func必须返回一个布尔值。

    eg1:从一个列表中过滤出大于30的数

    >>> l = [57,23,11,4,38]
    >>> list(filter(lambda x: x>30,l))
    [57, 38]
    

    eg2:判断两个列表的交集

    >>> a = [2,7,5,9,3]
    >>> b = [11,2,10,7,4]
    >>> list(filter(lambda x: x in a,b))
    [2, 7]
    
  • reduce(func,seq)

    Python3中reduce移到了functools模块中,需要通过“from functools import reduce”来使用它。
    如果func是具有两个参数,返回一个值的函数,每次选取序列中的前两个元素,传入func中,得到的结果和剩余元素一起组成新的序列,再选取序列中的前两个元素…,这样一直计算到最后,得到一个值,把它作为reduce的结果返回。

    eg:求1~100的和

    >>> from functools import reduce
    >>> reduce(lambda x,y: x+y, range(1,101))
    5050
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值