简约而不简单的匿名函数

一、匿名函数基础

匿名函数的格式如下:lambda argument1,argument2,…,argumentN:expression,可以看出匿名函数的关键字是lambda;

square = lambda x: x**2

square(3)

输出:9

1、lambda是一个表达式(expression),而不是一个语句(statement);

  • 表达式:就是用一系列的公式去表达一个东西,比如x+2、x**2等;
  • 语句:是完成了某些功能,例如赋值语句、打印语句

使用场景:

  • 可以用在列表内部,而常规函数却不能

result=[(lambda x:x**2)(x)for x in range(10)]

print(result)

输出:[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

  • lambda可以被用作某些函数的参数,而常规函数却不能

l = [(1, 20), (3, 0), (9, 10), (2, -1)]

l.sort(key=lambda x: x[1]) # 按列表中元祖的第二个元素排序

print(l)

# 输出

[(2, -1), (3, 0), (9, 10), (1, 20)]

2、lambda的主体是只有一行简单表达式,并不能扩展成一个多行的代码块。

lambda和函数发挥其不同的作用,lambda专注于简单的任务,而常规函数则负责更复杂的多行逻辑。

二、为什么要使用匿名函数?

python中用匿名函数的地方都可以等价成其他表达式,也可以不使用匿名函数,但优点是可以简化代码的复杂度,模块化代码。

python主要提供了这么几个函数:map()、filter()和reduce(),通常结合匿名函数lambda一起使用;

  • Map(function,iterable)函数,它表示对iterable中每个元素,都运用function这个函数,最后返回一个新的可遍历的集合。

l = [1, 2, 3, 4, 5]

new_list = map(lambda x: x * 2, l)       # [2, 4, 6, 8, 10]

  • Filter(function,iterable)函数,和map类似,fileter()函数表示对iterable中的每个元素,都是用function判断,并返回true或false。最后将返回True的元素组成一个新的可遍历的集合。

l = [1, 2, 3, 4, 5]

new_list = filter(lambda x: x % 2 == 0, l)        # [2, 4]

  • Reduce(function,iterable)函数,通常用来对一个集合坐一些累计操作。function是一个函数对象,规定它有两个参数,表示对iterable中的每个元素以及上一次调用的结果,运用function进行计算,所以最后返回的是一个单独的数值。

 

l = [1, 2, 3, 4, 5]

product = reduce(lambda x, y: x * y, l) # 1*2*3*4*5 = 120

 

思考题:如果让你对一个字典d = {'mike': 10, 'lucy': 2, 'ben': 30},根据值进行由高到底的排序?

程序:

d={'mike':10,'lucy':2,'ben':30}

print(d.items())

result=sorted(d.items(),key=lambda x:x[1],reverse=True)

print(result)

输出:

dict_items([('mike', 10), ('lucy', 2), ('ben', 30)])

[('ben', 30), ('mike', 10), ('lucy', 2)]

备注:sorted(d.items(),key=lambda x:x[1],reverse=True),d.items()为待排序的对象,key=lambda x:x[1]表示对前边的对象的第二维数据的值进行排序,reverse为排序规则,reverse=True为降序,reverse=false为升序;

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值