python:lambda,匿名函数

  • 在Python中使用lambda关键字定义匿名函数。lambda关键字定义的 函数也被称为lambda()函数,定义lambda()函数的语法如下。 “参数列表”与函数的参数列表是一样的,但不需要用小括号括起来
    • lambda 函数是一种小的匿名函数。
    • lambda 函数可接受任意数量的参数,但只能有一个表达式。

在这里插入图片描述

语法:

lambda arguments : expression

说明:

  • 参数可以一个,也可以多个用逗号隔开,这个参数会用在后边逻辑代码里使用
  • 参数后边紧跟着冒号,冒号后边为逻辑代码
  • 逻辑代码的计算结果为 lambda 的返回值
  • lambda 可以没有参数,如同我们定义无参数的函数一样

注意:

  • 无参数的 lambda 可以将函数执行变为可调用对象,在一些高阶函数入参时非常有用
  • lambda体部分不能是一个代码块,不能包含多条语句,只有一条语句,语句会计算一个结果并返回给lambda()函数,但与有名称的函数不同的是,不需要使用return语句返回

在这里插入图片描述

在这里插入图片描述

实例

add = lambda x,y: x+y
add(1,4) # 5

上例中利用 lambda 定义 x 和 y 两个变量,逻辑为把这两个变量相加并返回,再把这个匿名函数赋值给 add, 最后我们就可以把 add 当做一个普通的函数去调用。

当然,我们也可以不用赋值变量,即时定义即时使用调用,如下:

(lambda x,y: x+y)(3,5)
# 8

可以认为 lambda 是一个不需要起名的快捷函数,可以随时定义随时使用。

可以不指定参数,直接返回值:

# 无参数
(lambda : 1)()
# 1

f = lambda : 1
f()
# 1

条件判断

# 两个数的最大值
(lambda x,y: x if x>y else y )(49,5) # 49

和字典结合

# 可以定义在字典的值里,用 key 来调用
d = {'+': lambda x,y: x+y, '-': lambda x,y: x-y}
d['+'](3, 8) # 11

map

# 作为 map 的迭代方法
a = [1, 2, 3, 4, 5, 6]
result = map(lambda x: x+1, a)
list(result)
# [2, 3, 4, 5, 6, 7]

filter

# 作为过虑器的过滤逻辑
a = [1, 2, 3, 4, 5, 6]
result = filter(lambda x: x%2==0, a)
list(result)

reduce

from functools import reduce
# 作为 reduce 累积迭代的方法
a = [1, 2, 3, 4, 5, 6]
result = reduce(lambda x, y: x+y, a)
result

sorted

# 指定属性排序
s = [{'name': 'tom', 'age': 22},
     {'name': 'lily', 'age': 19},
     {'name': 'lucy', 'age': 20}]

sorted(s, key=lambda x: x['age'])

# [{'name': 'lily', 'age': 19},
#  {'name': 'lucy', 'age': 20},
#  {'name': 'tom', 'age': 22}]

iter

iter() 函数用来生成迭代器,lambda 中可用 next() 调用:

# 注:x 变量没有用,在一些对象中可用来占位
n = lambda x, y=iter('abcdef'): next(y)
# 可调用 6 次,每次返回其中一个值
n(None) # 'a'
n(None) # 'b'
...

注意

匿名函数是使用 lambda 创建的函数,所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。

除了作为参数传给高阶函数之外,Python 很少使用匿名函数。由于句法上的限制,非平凡的 lambda 表达式要么难以阅读,要么无法写出。

lambda 句法只是语法糖:与 def 语句一样,lambda 表达式会创建函数对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值